多个数据触发覆盖

时间:2018-10-24 05:51:52

标签: c# wpf xaml datatrigger

<Style.Triggers>
        <DataTrigger Binding="{Binding Result.IsRejected}" Value="True">
            <Setter Property="Foreground" Value="Green"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Result.RilibakViolation}" Value="True">
            <Setter Property="Foreground" Value="Red"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Result.RilibakViolation}" Value="False">
            <Setter Property="Foreground" Value="{DynamicResource ControlsForegroundColor}"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Result.IsViolated}" Value="True">
            <Setter Property="Foreground" Value="Red"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Result.IsViolated}" Value="False">
            <Setter Property="Foreground" Value="{DynamicResource ControlsForegroundColor}"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding Result.ResultIncluded}" Value="False">
            <Setter Property="Foreground" Value="IndianRed"/>
        </DataTrigger>

    </Style.Triggers>

我有这段代码,尝试根据该Result对象的不同属性更改前景颜色。我的问题是只有最后3个工作和IsRejected或RilibakViolation无法工作。例如:即使第一个为true,也不会显示为绿色。这段代码是否还有其他方法可以使其在所有情况下都能正常工作?

1 个答案:

答案 0 :(得分:0)

一个好方法是创建一个MultiConverter并传递所有必要的属性(IsRejected,RilibakViolation,IsViolated等)。转换器将接收参数,然后决定返回哪种颜色。

通过这种方式,每次更改模型中的属性时,都会激活转换器并相应地更改前景。