我有一个分配给我的usercontrol
的viewmodel类class UserControlViewModel
{
public bool A { get; set; }
public bool B { get; set; }
}
我想将一些颜色绑定到依赖于A和B viewmodel属性的Background属性。类似的东西:
A = true, B = true : Black
A = false, B = false: White
A = true, B = false: Green
A = false, B = true: Red
<UserControl Background="{Binding Path=???}" />
我想我可以为我的情况创建转换器,它应该接受UserControlViewModel实例并将A和B属性转换为Brush实例,反之亦然。
或者我可能会创建实现转换逻辑的另一个属性:
class UserControlViewModel
{
public bool A { get; set; }
public bool B { get; set; }
public Brush MyBrush {
get {
if (A && B) return Brushes.Black;
...
}
}
}
解决问题的最佳方法是什么?
答案 0 :(得分:2)
改为使用DataTrigger:
<UserControl ...>
<UserControl.Style>
<Style TargetType="UserControl">
<Style.Triggers>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding A}" Value="True"/>
<Condition Binding="{Binding B}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="Black"/>
</MultiDataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding A}" Value="False"/>
<Condition Binding="{Binding B}" Value="False"/>
</MultiDataTrigger.Conditions>
<Setter Property="Background" Value="White"/>
</MultiDataTrigger>
<!-- and so on... -->
</Style.Triggers>
</Style>
</UserControl.Style>
</UserControl>