在DataTriggers中将DataBinding添加到Model中

时间:2014-04-08 09:21:22

标签: c# wpf xaml styles templating

我有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访问它?

2 个答案:

答案 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 PropertyStyle应用于各个项目。试试这个:

<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.TriggerDataTrigger使用如下:

<DataTrigger Bindind="{Binding Path=IsColored}" Value="True">
    <Setter Property="Foreground" Value="Blue" />
</DataTrigger>

关于此错误:

  

无法在MyNameSpace.MyUserControl类型的数据上下文中解析属性'IsColored'

它告诉您,未正确设置DataContext