Wpf 数据绑定正在工作,但输出窗口状态为数据绑定错误

Wpf 数据绑定正在工作,但输出窗口状态为数据绑定错误,wpf,Wpf,我有一个组合框,它绑定到我的viewmodel上的可观察集合。此集合中的对象类型为LanguageItem对象。我在组合框的ItemTemplate中有一个DataTemplate来定制UI 在这里,我有一个StackPanel,它有两个控件。这些控件绑定到LanguageItem对象中的某些属性。一切正常 这就是错误开始的地方。我有两种样式,一种在StackPanel上,另一种在TextBlock上。这些仅包含一些触发器,用于根据ComboBoxItem.IsHighlighted的值更改某些

我有一个
组合框
,它绑定到我的viewmodel上的
可观察集合
。此集合中的对象类型为
LanguageItem
对象。我在
组合框
ItemTemplate
中有一个
DataTemplate
来定制UI

在这里,我有一个
StackPanel
,它有两个控件。这些控件绑定到
LanguageItem
对象中的某些属性。一切正常

这就是错误开始的地方。我有两种样式,一种在
StackPanel
上,另一种在
TextBlock
上。这些仅包含一些触发器,用于根据
ComboBoxItem.IsHighlighted
的值更改某些颜色。两个
DataTriggers
,一个为真,一个为假

现在,由于每个
ComboBoxItem
DataContext
将是我的
LanguageItem
对象之一,为了访问
IsHighlighted
属性,我使用
RelativeSource
作为数据触发器中的绑定。下面是一个例子:

<DataTrigger Value="True" 
             Binding="{Binding Path=IsHighlighted, 
                               RelativeSource={RelativeSource FindAncestor, 
                                               AncestorType={x:Type ComboBoxItem}}}">
System.Windows.Data Error: 4 : 
Cannot find source for binding with reference 'RelativeSource FindAncestor,
AncestorType='System.Windows.Controls.ComboBoxItem', AncestorLevel='1''. 
BindingExpression:Path=IsHighlighted; DataItem=null; 
target element is 'TextBlock' (Name=''); 
target property is 'NoTarget' (type 'Object')
我不明白如果绑定正常,为什么会记录此错误。起初,我怀疑这些错误消息是否指向这些绑定。我注释掉了这两种样式,错误消失了。但正如所料,鼠标上方的颜色变化也是如此

我是否对某些东西缺乏理解,或者这是VS中的一个bug?作为参考,这里有一个完整的样式。我的目标是.NET 3.0使用VS 2012和更新4

<DataTemplate DataType="{x:Type model:LanguageItem}">

    ...

    <StackPanel.Style>
        <Style TargetType="{x:Type StackPanel}">
            <Style.Triggers>
                <DataTrigger Value="True"
                             Binding="{Binding Path=IsHighlighted,
                                               RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBoxItem}}}">
                    <Setter Property="Background" Value="{StaticResource TitleBrush}"/>
                </DataTrigger>
                <DataTrigger Value="False"
                    Binding="{Binding Path=IsHighlighted,
                                      RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBoxItem}}}">
                    <Setter Property="Background" Value="{StaticResource BackgroundBrush}"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </StackPanel.Style>

    ...

</DataTemplate>

...
...

我猜
DataContext
在某种程度上超出了范围。如果数据绑定工作正常,这应该不是问题。 但是,为了消除该错误,您可以在找不到时设置回退值:

<StackPanel.Style>
    <Style TargetType="{x:Type StackPanel}">
        <Setter Property="Background" Value="{StaticResource BackgroundBrush}"/>
        <Style.Triggers>
            <DataTrigger Value="True"
                         Binding="{Binding Path=IsHighlighted, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBoxItem}}, FallbackValue=False}">
                <Setter Property="Background" Value="{StaticResource TitleBrush}"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</StackPanel.Style>


另外,我想指出的是,对于2状态DataTrigger,您不需要同时满足真/假条件。只有一个条件,而设置“默认”条件就足够了。

可能的重复:检查它绑定发生的顺序实际上不在您的控制范围内。我发现多值转换器有这个问题。但是稍后将再次调用转换器,并使用所有绑定。谢谢您的帮助。设置FallBackValue将输出窗口中的红色错误替换为黄色警告,并显示完全相同的消息。我相当有信心它不会超出范围。此组合框始终显示在应用程序的工具栏上。但我要检查一下。我不知道这些触发器,并且已经更新了它们。