我的视图上有一个矩形,应该根据视图模型上的属性值更改其背景颜色。
<Rectangle DataContext="{Binding State}" />
查看模型
public class MyViewModel {
// dummy property
public Status State { get; private set; }
}
状态
public enum Status {
State1,
State2,
State3
}
如何将视图上的矩形连接到各种可能的状态?这是 EventTrigger , DataTrigger 还是我必须创建 ControlTemplate ?我只是要求视图上需要完成的事情,视图模型等已经正常工作并通知状态变化。
答案 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>
希望有所帮助