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