c# - 如何在 View 模型不知道 WPF 的情况下绑定(bind) WPF 元素颜色?

标签 c# wpf xaml mvvm

我想知道如何将元素的颜色属性绑定(bind)到 ViewModel 而不会将 View 实现(例如 WPF)泄漏到 ViewModel 中从而创建依赖关系。例如,我有一个 TextBlock 并且我已经绑定(bind)了它的 Foreground 属性,如下所示:

<TextBlock Name="MyTextBlock" Foreground="{Binding Path=PropName}" />

许多来源,例如 this , this , this等。在 ViewModel 中使用 System.Windows.Media.Brush,如下所示:

public System.Windows.Media.Brush PropName
{
    get
    {
        //assume presentation logic to determine correct color.
        return System.Windows.Media.Brushes.Red;
    }
}

我不希望我的 ViewModel 绑定(bind)到 WPF(即通过 System.Windows.Media.Brush)或任何其他表示框架。有什么方法可以让我可以使用通用或通用颜色类型甚至 RGB 值,并在 XAML 中从绑定(bind)中正确解释它吗?

最佳答案

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

enum Colors {Red, Green, Yellow, Pink, Blue};

然后,如果您正在使用 WPF 进行开发,您可以只创建一个 ValueConverter,您可以在其中确定枚举是否为红色,您可以按照您想要的方式转换它并将其返回以供控制。这样您就可以将 UI 逻辑与 View 模型分开。 Viewmodel 会告诉您什么颜色,UI 会处理其余部分。

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

关于c# - 如何在 View 模型不知道 WPF 的情况下绑定(bind) WPF 元素颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30600935/

相关文章:

wpf - 将文字附加到静态资源

c# - BitArray 以错误的方式返回位?

c# - 寻找一种在 C# 中截断字符串的简单方法

c# - 如何在 C# 中确保对象的类型等于此?

.net - WPF 初学者技巧

wpf - 如何在我的 MVVM 应用程序中利用 MEF?

c# - 在需要调用证书的 asp.net 中创建 HTTPS 安全 SOAP 网络服务

c# - 如何将 DataContext 绑定(bind)到 XAML 中的通用 ViewModel?

c# - DataGrid 的自定义列模板

c# - 根据值更改 DataGrid 单元格颜色