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

.net 使用命令与事件处理程序的WPF MVVM,.net,wpf,mvvm,binding,.net,Wpf,Mvvm,Binding,我喜欢MVVM模式,一旦你开始使用它,你就会对它上瘾 我知道在完美世界中,视图背后的代码几乎是空的(可能是构造函数中的一些代码),视图的每个方面都是从ViewModel中操纵的 但有时在ViewModel中创建新字段、属性和命令会比在事件处理程序中实现相同的内容创建更多的代码 目前,我坚持以下原则: 如果事件处理程序代码操纵其视图的一小部分(例如,按钮单击事件处理程序增加位于同一视图上的某些文本块的字体),则可以在事件处理程序内实现逻辑。但若视图需要操作业务逻辑或访问视图之外的资源,那个么我将这

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

我知道在完美世界中,视图背后的代码几乎是空的(可能是构造函数中的一些代码),视图的每个方面都是从ViewModel中操纵的

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

目前,我坚持以下原则:

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

你觉得我的方法怎么样

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


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

我认为您的经验法则不错

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

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


但是请记住,如果您使用单元测试,则很难测试该视图逻辑。如果需要测试,最好将其放在viewmodel中。

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

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