WPF:将多个viewmodel属性组合成某个可绑定值的最佳实践

时间:2015-07-03 16:42:39

标签: wpf

我有一个分配给我的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; 
          ...
    }
 }
}

解决问题的最佳方法是什么?

1 个答案:

答案 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>