我想知道如何将一个元素的颜色属性绑定到ViewModel而不将视图实现(例如WPF)泄漏到ViewModel中,从而创建一个依赖项.例如,我有一个TextBlock,我已经绑定了它的Foreground属性:
<TextBlock Name="MyTextBlock" Foreground="{Binding Path=PropName}" />
Run Code Online (Sandbox Code Playgroud)
许多来源,例如this,this,this等System.Windows.Media.Brush,都在ViewModel中使用,如下所示:
public System.Windows.Media.Brush PropName
{
get
{
//assume presentation logic to determine correct color.
return System.Windows.Media.Brushes.Red;
}
}
Run Code Online (Sandbox Code Playgroud)
我不希望我的ViewModel绑定到WPF(即via System.Windows.Media.Brush)或任何其他表示框架.有没有办法做到这一点,以便我可以使用一般或通用颜色类型甚至RGB值,并在绑定的XAML中正确解释它?
我会创建一个颜色的枚举.例如:
enum Colors {Red, Green, Yellow, Pink, Blue};
Run Code Online (Sandbox Code Playgroud)
然后,如果您正在使用WPF进行开发,您可以创建一个ValueConverter,您可以在其中确定枚举是否为红色,您可以按照您希望的方式对其进行转换并将其返回以进行控制.这样您就可以将UI逻辑与viewmodel分开.Viewmodel告诉其余的颜色和UI处理.
如果你想要自定义颜色,上面的答案是处理它的好方法.