10

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

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

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

目前我坚持以下规则:

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

你觉得我的方法怎么样?

在使用事件处理程序和 ViewModel 时,您会尽量避免什么?

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

4

2 回答 2

15

我会说你的经验法则还不错。

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

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

但是请记住,如果您使用单元测试,那么测试那一点视图逻辑将非常困难。如果您需要对其进行测试,最好将其放在视图模型中。

于 2009-04-01T11:53:43.177 回答
2

我想我也可以在之前的评论中添加一些东西,

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

于 2010-09-22T10:45:05.583 回答