gpt4 book ai didi

c# - 为什么将绑定(bind)数据上下文设置为控件的数据上下文?

转载 作者:行者123 更新时间:2023-11-30 22:07:53 25 4
gpt4 key购买 nike

我有一个名为“CardDisplay”的用户控件,带有一个名为“CardValue”的公开依赖属性。控件本身基本上只是一个绑定(bind)到此属性的文本 block (实际上是一个图像,但它与文本 block 一起使用并且更容易显示),如下所示:

<UserControl>
<Grid>
<TextBlock Text="{Binding CardValue}"/>
</Grid>
</UserControl>

为简单起见,数据上下文在代码隐藏中设置为 this,尽管它也适用于标准 View 模型。如果你这样使用它,这很好用:

<local:CardDisplay CardValue="2"/>

“2”按预期出现在控件中。但是,如果我将该行更改为

<local:CardDisplay CardValue="{Binding CurrentCard}"/>

什么都没有显示,我得到一个绑定(bind)异常,说在类型“DisplayCard”上找不到“CurrentCard”。显然它不应该查看显示卡,它应该查看父级的数据上下文(当然,它有一个名为“CurrentCard”的属性)。

切换到“ElementName”绑定(bind)按预期工作:

<TextBock x:Name="HiddenText" Text="{Binding CurrentCard}"/>
<local:CardDisplay CardValue="{Binding Path=Text, ElementName=HiddenText}"/>

基本上,我不知道为什么我的绑定(bind)突然停止在正确的位置查找。在一个简单的数据模板中也可以看到相同的行为:

<DataTemplate x:Key="CardTemplate">
<Image Source="{Binding Converter={StaticResource IntToImgSourceConverter}"/>
</DataTemplate>

<ContentPresenter ContentTemplate="{StaticResource CardTemplate}" Content="{Binding CurrentCard}"/>

将抛出一个绑定(bind)异常,指出它在“int”类型上找不到名为“CurrentCard”的属性。

为什么父级绑定(bind)试图在子级数据上下文中查找属性?从子修复程序中删除数据上下文(绑定(bind)再次按预期工作),但似乎没有必要这样做。

编辑:需要明确的是,设置数据上下文后,绑定(bind) DP 基本上是无用的。如果我的绑定(bind)是正确的,那么让它使用父级数据上下文的最佳方法是什么?我正在考虑的用例是让它发挥作用:

<ItemsControl ItemsSource={Binding PlayerHand}>
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:CardDisplay CardValue="{Binding Path=CardValue}"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

最佳答案

这种绑定(bind):

<local:CardDisplay CardValue="{Binding CurrentCard}"/>

表示从绑定(bind)源当前 DataContext 绑定(bind)到路径 CurrentCard。由于您在代码隐藏中设置 UserControl 的 DataContext,它不会继承父级 DataContext,因此您遇到了绑定(bind)错误。 DataContext 从父级 DataContext 继承,仅当您未在子级别设置它时。

在另一边,这种绑定(bind)工作正常:

<local:CardDisplay CardValue="{Binding Path=Text, ElementName=HiddenText}"/>

因为这个与当前的DataContext无关。它明确地将一个元素设置为绑定(bind)源而不是当前的 DataContext

关于c# - 为什么将绑定(bind)数据上下文设置为控件的数据上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22653343/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com