将对象属性绑定到UserControl DP错误

时间:2014-10-03 08:28:50

标签: wpf xaml

我在使用此UserControl aph:FilterItemControl

时遇到问题

Filter对象具有以下属性:Negate,Valued和MatchCase。第一个和最后一个绑定就好了,但Valued没有。

<DataTemplate DataType="{x:Type helpers:Filter}">
    <Grid x:Name="FilterGrid" Margin="10,0,0,0" >
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>

        <ToggleButton x:Name="NegationButton" 
                      IsChecked="{Binding Negate}"
                      Content="!"
                      Grid.Column="0" />

        <aph:FilterItemControl x:Name="FilterValueTbx" 
                               ToolTip="{Binding Valued}"
                               ValueType="{Binding CurrentPropertyFilter.PropertyType, Source={x:Static helpers:MyClass.Instance} }"
                               Grid.Column="1" />

        <ToggleButton x:Name="MatchCaseToggle" 
                      IsChecked="{Binding MatchCase}"
                      Content="Aa"
                      Grid.Column="2" >
        </ToggleButton>
    </Grid>
</DataTemplate>

错误:

  

System.Windows.Data错误:40:
  BindingExpression路径错误:   &#39;量值&#39;在&#39; object&#39;上找不到的属性&#39;&#39; FilterItemControl&#39;   (名称=&#39;用户控件&#39;)&#39 ;.
  BindingExpression:路径=量值;   的DataItem =&#39; FilterItemControl&#39; (名称=&#39;用户控件&#39);
  目标元素是   &#39; FilterItemControl&#39; (名称=&#39;用户控件&#39);
  目标属性是   &#39;工具提示&#39; (键入&#39;对象&#39;)

只是想知道为什么以及如何解决这个问题?

看起来它跳转到UserControl的DataContext,为什么?

2 个答案:

答案 0 :(得分:1)

您可以使用以下语法访问父元素的数据上下文:

  {Binding Path=PathToProperty, RelativeSource={RelativeSource AncestorType={x:Type typeOfAncestor}}}

在您的示例中,您将使用以下内容:

{Binding DataContext.Valued, 
                              RelativeSource={RelativeSource FindAncestor,
                                             AncestorType=Grid}}">

答案 1 :(得分:1)

  

看起来它正在跳转到UserControl的DataContext,为什么?

如果您不提供绑定源,它将绑定到该元素的DataContext。我最好的猜测是你在控件内部更改DataContext的{​​{1}}。