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

时间:2014-05-21 13:28:20

标签: wpf

我的ComboBox绑定到了我的viewmodel上的ObservableCollection。此集合中的对象类型是LanguageItem个对象。我在DataTemplate的{​​{1}}内有ComboBox来自定义用户界面。

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

这是错误开始的地方。我有两种样式,一种在LanguageItem上,另一种在StackPanel上。这些只包含一些触发器,可根据TextBlock的值更改某些颜色。每个ComboBoxItem.IsHighlighted两个,一个用于true,一个用于false。

现在,由于每个DataTriggers的{​​{1}}将是我的DataContext个对象之一,要访问ComboBoxItem属性我使用LanguageItem我的数据中的绑定触发器。这是一个例子:

IsHighlighted

当我运行我的应用程序时,这确实有效,并且当我将RelativeSource中的不同项目鼠标悬停时,颜色设置正确。但是在Visual Studio的输出窗口中,我可以看到记录的数据绑定错误。这是一个例子:

<DataTrigger Value="True" 
             Binding="{Binding Path=IsHighlighted, 
                               RelativeSource={RelativeSource FindAncestor, 
                                               AncestorType={x:Type ComboBoxItem}}}">

我不明白为什么绑定工作时会记录此错误。起初我很奇怪这些错误消息引用了这些绑定。我评论了两种风格,错误消失了。但正如预期的那样,鼠标上的颜色也发生了变化。

我是否对某些内容缺乏了解,或者这是VS中的错误?作为参考,这是一个完整的风格。我使用VS 2012和Update 4来定位.NET 3.0。

ComboBox

1 个答案:

答案 0 :(得分:1)

我猜测DataContext在某些时候会超出范围。如果DataBinding有效,这不应成为问题。 但是,为了摆脱这个错误,你可以在找不到它时设置一个FallbackValue:

<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,您不需要同时满足True / False条件。只有一个条件,同时设置&#39;默认&#39;条件足够好。