我的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
答案 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;条件足够好。