【发布时间】:2015-06-02 15:57:05
【问题描述】:
我想知道如何将元素的颜色属性绑定到 ViewModel,而不会将视图实现(例如 WPF)泄漏到 ViewModel 中,从而创建依赖项。例如,我有一个TextBlock,我已经绑定了它的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 绑定到 WPF(即通过 System.Windows.Media.Brush)或任何其他演示框架。有什么方法可以让我使用通用或通用颜色类型甚至 RGB 值,并通过绑定在 XAML 中正确解释它吗?
【问题讨论】:
-
为了确保我对您的理解正确,这是否只是一种过于复杂的方式来询问如何将画笔/颜色作为视图的资源而不需要代码和 xaml?
-
不,我真的是 WPF 新手。你能详细说明一下吗?
-
1) 你没有。 2)它们很便宜,这很好。这不是教条,而是模式。旁注——为什么你的虚拟机知道或关心颜色?老实说不应该。但是,根据系统当前所处的状态,系统的某些部分可能会用某种颜色表示。使用转换器来解释 VM 或模型的状态,并将该状态转换为颜色。例如,如果您的 Person 模型无效,请将其转换为 Red。如果它有效、已修改但未保存,则将其转换为黄色。
-
您可以简单地从您的视图模型中返回一个字符串。隐式 TypeConverter 会将其转换为 Brush。您需要返回已知颜色“红色”或返回有效的#FFFFF 颜色。
-
能否请您映射某人的答案或向我们提供更多信息?