我有一个ObservableCollection<MyClass>
。而MyClass
有一个称为IsColored
的性质
我创建了一个ListView,它将为所有具有IsColored属性的行着色为true。
<ListView ItemsSource="{Binding MyClassList}">
<hControls:ListView.Style>
<Style TargetType="ListView">
<Setter Property="Foreground" Value="Blue" />
</Style>
</hControls:ListView.Style>
...
</ListView>
为了满足ListView的Colors条件,我应该添加一个DataTrigger
<Style.Triggers>
<Trigger Property="IsColored" Value="True">
<Setter Property="Foreground" Value="Blue" />
</Trigger>
</Style.Triggers>
但问题是IsColored没有被认可。
如何将绑定添加到该属性,以便我可以从DataTrigger访问它?
我不知道为什么@Anatoliy这么快就放弃了,并删除了他的答案,因为他是对的。。。您确实需要使用DataTrigger
:
<Style.Triggers>
<DataTrigger Binding="{Binding IsColored}" Value="True">
<Setter Property="Foreground" Value="Blue" />
</DataTrigger>
</Style.Triggers>
你评论说你在尝试这个代码时遇到了这个错误:
无法解析MyNameSpace类型的数据上下文中的属性"IsColored"。MyUserControl
这只是意味着您的Style
无法访问ListView
中的项目。查看您的代码,似乎您正在尝试为ListViewItem
定义Style
,但在ListView Style
中。相反,您需要使用ListView.ItemContainerStyle
属性将Style
应用于各个项目。试试这个:
<ListView ItemsSource="{Binding MyClassList}">
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding IsColored}" Value="True">
<Setter Property="Foreground" Value="Blue" />
</DataTrigger>
</Style.Triggers>
</Style>
</ListView.ItemContainerStyle>
...
</ListView>
在第一种情况下,您使用常规Style.Trigger
,DataTrigger
使用如下:
<DataTrigger Bindind="{Binding Path=IsColored}" Value="True">
<Setter Property="Foreground" Value="Blue" />
</DataTrigger>
关于此错误:
无法解析MyNameSpace类型的数据上下文中的属性"IsColored"。MyUserControl
它告诉你没有正确设置DataContext
。