如何在视图模型不知道WPF的情况下绑定WPF元素颜色?

ror*_*.ap 2 c# wpf xaml mvvm

我想知道如何将一个元素的颜色属性绑定到ViewModel而不将视图实现(例如WPF)泄漏到ViewModel中,从而创建一个依赖项.例如,我有一个TextBlock,我已经绑定了它的Foreground属性:

<TextBlock Name="MyTextBlock" Foreground="{Binding Path=PropName}" />
Run Code Online (Sandbox Code Playgroud)

许多来源,例如this,this,thisSystem.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中正确解释它?

Jon*_*ula 6

我会创建一个颜色的枚举.例如:

enum Colors {Red, Green, Yellow, Pink, Blue};
Run Code Online (Sandbox Code Playgroud)

然后,如果您正在使用WPF进行开发,您可以创建一个ValueConverter,您可以在其中确定枚举是否为红色,您可以按照您希望的方式对其进行转换并将其返回以进行控制.这样您就可以将UI逻辑与viewmodel分开.Viewmodel告诉其余的颜色和UI处理.

如果你想要自定义颜色,上面的答案是处理它的好方法.

  • 放置一个字典来映射转换器中的2.任务完成. (2认同)