C# ReactiveUI将枚举属性绑定到视图模型中的颜色属性

C# ReactiveUI将枚举属性绑定到视图模型中的颜色属性,c#,reactiveui,C#,Reactiveui,我正在启动我的第一个反应式UI项目。我有一个枚举,我想将特定的颜色映射到特定的枚举值。我如何使用反应式用户界面来实现这一点?因此,当状态改变时,文本颜色也会改变 说我想要地图 跑步->绿色 空闲->橙色 故障->红色 手动->蓝色 这是我的视图模型 public enum Status { Running, Idle, Faulted, Manual} public class MachineStatusViewModel : ReactiveObject { public str

我正在启动我的第一个反应式UI项目。我有一个枚举,我想将特定的颜色映射到特定的枚举值。我如何使用反应式用户界面来实现这一点?因此,当状态改变时,文本颜色也会改变

说我想要地图

  • 跑步->绿色
  • 空闲->橙色
  • 故障->红色
  • 手动->蓝色
这是我的视图模型

public enum Status { Running, Idle, Faulted, Manual}

public class MachineStatusViewModel : ReactiveObject
{
    public string Name;
    public Status Status;
    public System.Drawing.Color TextColor;

    public MachineStatusViewModel()
    {           

    }
}

更好的方法是对WhenAnyValue使用单向绑定运算符

this.OneWayBind(this.ViewModel,vm=>vm.Status,view=>view.TextColor,GetColor)

private Color GetColor(状态)
{
开关(状态)
{
案例状态。正在运行:
返回颜色。绿色;
案例状态。空闲:
返回颜色:橙色;
案例状态。故障:
返回颜色:红色;
案例状态。手册:
返回颜色:蓝色;
}
}

出于好奇,为什么这是一种更好的方法?出于几个原因,您可以使用已注册的全局绑定。因此,您不必一直重复转换。因此,如果您在多个位置使用绑定,它将减少您必须使用的代码量。有关示例,请参见。在值转换器方面也有一些缓存,可以给您带来少量的收益。因此,您可能要做的是使用
IBindingTypeConverter
注册一次Status->Color,您只需要在应用程序中注册一次,然后无论何时使用Bind/OneWayBind操作符,它都会知道如何从那时起处理这些情况。这仍然是在ViewModel中完成的,还是在view中完成的?