在视图模型中具有WPF细节的优缺点

Chr*_*tte 7 wpf xaml mvvm

我无法决定如何考虑这段代码:

public SolidColorBrush Brush
{
    get { return IsValid ? _validItemBrush : _invalidItemBrush; }
}
Run Code Online (Sandbox Code Playgroud)

它是我当前项目中视图模型的一部分,您可以想象,Brush它将被绑定到UI中的一些文本元素,以指示(in-)其他数据片段的有效性,在另一个相当简单和直接的对话框中.

这段代码的支持者说,既然我们正在使用WPF,我们也可以在视图模型中允许一些简单的WPF特定结构.

反对者说这违反了"关注点",因为它明确规定了应该仅仅由观点来处理的风格.

请分享您的论点,如果您对上述代码不满意,请分享您对其他解决方案的看法.(我对你对使用DataTemplates的看法特别感兴趣).

是否有可能被认为是最佳实践的解决方案?

Ree*_*sey 8

就个人而言,我会在XAML中定义两个画笔,并使用它们的控件切换画笔(在xaml中)基于IsValid属性.这可以通过DataTriggers甚至单个IValueConverter轻松完成 - 转换器可以使用2个画笔和一个布尔值,并且可以非常轻松地在它们之间进行交换.

这使得业务逻辑表示保持中立 - "刷子"非常特定于特定形式的表示,以及纯粹的View选择.将其硬编码到ViewModel中违反了单一责任原则,并且不是关注点的清晰分离.

我非常希望在View中保留它,并根据IsValidViewModel特定的(绑定)属性进行切换.