我想知道如何将元素的颜色属性绑定(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/