我有ObservableCollection<MyClass>
。 MyClass
有一个名为IsColored
我创建了一个ListView,它应该将所有具有IsColored属性的行着色为真。
<ListView ItemsSource="{Binding MyClassList}">
<hControls:ListView.Style>
<Style TargetType="ListView">
<Setter Property="Foreground" Value="Blue" />
</Style>
</hControls:ListView.Style>
...
</ListView>
为了满足我的ListView的颜色条件,我应该添加一个DataTrigger
<Style.Triggers>
<Trigger Property="IsColored" Value="True">
<Setter Property="Foreground" Value="Blue" />
</Trigger>
</Style.Triggers>
但问题是IsColored无法识别。
如何将Binding添加到该属性,以便我可以从DataTrigger访问它?
答案 0 :(得分:3)
我不确定为什么@Anatoliy如此迅速地放弃并删除了他的答案,因为他是对的......你做需要使用DataTrigger
:
<Style.Triggers>
<DataTrigger Binding="{Binding IsColored}" Value="True">
<Setter Property="Foreground" Value="Blue" />
</DataTrigger>
</Style.Triggers>
您评论说您在尝试此代码时遇到此错误:
无法解决财产问题&#39; IsColored&#39;在MyNameSpace.MyUserControl类型的数据上下文中
这只表示您的Style
无法访问ListView
的项目。查看您的代码,似乎您尝试为Style
定义ListViewItem
,但在ListView Style
内。相反,您需要使用ListView.ItemContainerStyle
Property将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>
答案 1 :(得分:0)
在第一种情况下,您使用常规Style.Trigger
,DataTrigger
使用如下:
<DataTrigger Bindind="{Binding Path=IsColored}" Value="True">
<Setter Property="Foreground" Value="Blue" />
</DataTrigger>
关于此错误:
无法在MyNameSpace.MyUserControl类型的数据上下文中解析属性'IsColored'
它告诉您,未正确设置DataContext
。