C# 为什么将绑定数据上下文设置为控件';什么是数据上下文?

C# 为什么将绑定数据上下文设置为控件';什么是数据上下文?,c#,xaml,data-binding,windows-store-apps,windows-8.1,C#,Xaml,Data Binding,Windows Store Apps,Windows 8.1,我有一个名为“CardDisplay”的用户控件,它具有一个名为“CardValue”的公开依赖属性。控件本身基本上只是一个绑定到此属性的textblock(实际上是一个图像,但它与textblock一起工作并且更易于显示),如下所示: <UserControl> <Grid> <TextBlock Text="{Binding CardValue}"/> </Grid> </UserControl> “2”按

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

<UserControl>
   <Grid>
      <TextBlock Text="{Binding CardValue}"/>
   </Grid>
</UserControl>
“2”按预期显示在控件中。但是,如果我将该行更改为

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

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

切换到“ElementName”绑定可以按预期工作:

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

基本上,我不知道为什么我的装订突然停止寻找正确的位置。在简单的数据模板中也可以看到相同的行为:

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

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

将引发绑定异常,表示在“int”类型上找不到名为“CurrentCard”的属性

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

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

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

这种绑定:

<local:CardDisplay CardValue="{Binding CurrentCard}"/>
因为这个与当前的
DataContext
无关。它显式地将元素设置为绑定源,而不是当前的
DataContext

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