WPF MVVM使用命令与事件处理程序

时间:2009-04-01 11:33:36

标签: .net wpf mvvm binding

我喜欢MVVM模式,一旦你开始使用它,你就会沉迷于它。

我知道在完美的世界中,你的View代码隐藏几乎是空的(可能是构造函数中的一些代码),View的每个方面都是从ViewModel中操作的。

但有时在ViewModel中创建新字段,属性和命令会创建比在事件处理程序中实现相同内容的代码更多的代码。

现在我坚持遵循以下规则:

如果事件处理程序代码操纵它的视图的很小一部分(例如按钮单击事件处理程序增加了位于同一视图上的某些TextBlock的字体),则可以在事件处理程序中实现逻辑。但是,如果View需要操作业务逻辑或访问视图之外的资源,那么我将这些职责分配给ViewModel。

您如何看待我的方法?

使用事件处理程序和ViewModel时,您尝试避免什么?

使用MVVM模式时,您可以推荐哪些最佳做法?

2 个答案:

答案 0 :(得分:14)

我说你的经验法则不错。

在我看来,核心问题是“特定于代码视图,还是解决了业务逻辑?”。

在视图中包含代码是可以的,如果该代码严格用于修改视图而不执行任何类型的业务逻辑。您更改字体大小的示例是视图中完美无缺的代码的主要示例(并且会增加ViewModel中的噪声,使其更难理解和维护)。 从本质上讲,如果你使用触发器,你已经做了一些,所以这并不奇怪。

请记住,如果使用单元测试,那么测试那个视图逻辑将非常困难。如果您需要测试,最好将它放在viewmodel中。

答案 1 :(得分:2)

我想我也可以在之前的评论中添加内容,

而不是使用事件处理程序,从非常适度的经验来看,命令为我提供了更多的灵活性,因为它提供了一个独立的机制来响应来自不同控件的事件/操作,并能够检查命令本身的状态。

相关问题