更改状态更改的样式

时间:2014-04-04 11:55:22

标签: c# wpf xaml mvvm

我的视图上有一个矩形,应该根据视图模型上的属性值更改其背景颜色。

<Rectangle DataContext="{Binding State}" />

查看模型

public class MyViewModel {

    // dummy property
    public Status State { get; private set; }

}

状态

public enum Status {
    State1,
    State2,
    State3
}

如何将视图上的矩形连接到各种可能的状态?这是 EventTrigger DataTrigger 还是我必须创建 ControlTemplate ?我只是要求视图上需要完成的事情,视图模型等已经正常工作并通知状态变化。

2 个答案:

答案 0 :(得分:1)

您可以通过自定义IValueConverter

Rectangle.Fill绑定到Status
<Rectangle Fill="{Binding State, Converter={StaticResource StatusConverter}}" />

和转换器看起来像这样:

public class StatusConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        switch ((Status)value)
        {
            case Status.State1:
                return new SolidColorBrush(Colors.Red);
            case Status.State2:
                return new SolidColorBrush(Colors.Green);
            case Status.State3:
                return new SolidColorBrush(Colors.Blue);
            default:
                throw new ArgumentException();
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

答案 1 :(得分:0)

Datatriggers应该在viewmodel状态更改中更改矩形背景。 像这样的东西

<Window.Resources>
    <Style TargetType="Rectangle">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=State}" Value="State1">
                <Setter Property="Fill" Value="Red" />
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=State}" Value="State2">
                <Setter Property="Fill" Value="Blue" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

希望有所帮助