我应该如何从ViewModel触发警报?

时间:2011-10-21 13:07:00

标签: .net design-patterns mvvm

我问过一些我认为具有良好设计感的同事的问题。有趣的是,我收到了不同的回复。那么你认为哪种选择最适合MVVM模式?为什么?

假设我需要在$ $ 10k以上时显示警告图标。

  • 选项1:VM具有属性“Amount”,XAML触发器和/或绑定设置元素可见性
  • 选项2:VM具有属性“ShowAlert”,XAML使用bool绑定可见性到可见性转换器
  • 选项3:VM具有属性“AlertVisibility”,XAML直接绑定
  • 选项4:其他(请解释)

感谢您的反馈!

2 个答案:

答案 0 :(得分:4)

在您的情况下,您有明确的业务规则Shown WHEN > 10k,它应该封装在ViewModel而不是View中,因为View知道HOW数据将显示而不是WHEN和WHY。

因此,我建议公开AmountShowAlert属性并避免公开AlertVisibility属性,因为它会分散此类WPF查看特定内容,例如Visibility枚举状态(隐藏,折叠) ,...)

如果您希望公开AlertVisibility,您将来可能面临以下问题 - 想象一下,WPF的新版本摆脱了烦人的Visibility枚举,在这种情况下您需要修改ViewModel公开新的Visibility基础结构/属性以保持View正常工作,但是当ViewModel中封装了View行为时,从MVVM角度来看这是不正确的。所以Keep it Simple并公开直截了当的bool AlertVisible属性。

编辑关于评论中的命名建议

绝对同意!我建议将AmountVisible重命名为IsAmountSpecified或类似的内容。

答案 1 :(得分:0)

我会通过转换器获取我的视图的警报图标可见性绑定金额值,该转换器采用10000的参数。转换器将返回可见或折叠。

当VM超过阈值时,您也可以让VM发送消息,并且任何关注它的视图或其他视图模型都可以对消息作出反应。