WPF MVVM使用命令和事件处理程序的区别

10

我喜欢MVVM模式,一旦开始使用它,就会上瘾。

在理想的情况下,你的View中的代码几乎为空(也许只有一些构造函数中的代码),而View的每个方面都由ViewModel进行操作。

但是,有时,在ViewModel中创建新字段、属性或命令会比在事件处理程序中实现同样的事情产生更多的代码。

目前,我遵循以下规则:

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

您对我的方法有何看法?

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

在使用MVVM模式时,您能推荐哪些最佳实践?

2个回答

15

我认为你的经验法则还不错。

在我看来,核心问题是“代码是否针对视图,还是解决业务逻辑?”。如果代码只是严格地用于修改视图而不执行任何业务逻辑,那么在视图中放置代码是可以接受的。你提到的更改字体大小的例子就是视图中完全可以使用的代码示例(如果将其放在ViewModel中会增加噪音,并使其更难以理解和维护)。 本质上,如果你使用触发器,已经做了一些这方面的工作,所以这并不奇怪。

但要记住,如果你使用单元测试,测试那一部分的视图逻辑将非常困难。如果需要进行测试,最好将其放在ViewModel中。


2

我认为我也可以在前面的评论中补充一些内容,

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接