我喜欢MVVM模式,一旦你开始使用它,你就会沉迷于它.
我知道在完美世界中,您的View代码隐藏几乎是空的(可能是构造函数中的一些代码),并且View的每个方面都是从ViewModel操纵的.
但有时在ViewModel中创建新字段,属性和命令会创建比在事件处理程序中实现相同内容的代码更多的代码.
我坚持遵守以下规则:
如果事件处理程序代码操纵它的视图的很小一部分(例如按钮单击事件处理程序增加了位于同一视图上的某些TextBlock的字体),则可以在事件处理程序中实现逻辑.但是,如果View需要操作业务逻辑或访问视图之外的资源,那么我将这些职责分配给ViewModel.
您如何看待我的方法?
使用事件处理程序和ViewModel时,您尝试避免什么?
使用MVVM模式时,您可以推荐哪些最佳实践?
我会说你的经验法则不错.
在我看来,核心问题是"特定于代码视图,还是它解决了业务逻辑?".
如果代码严格来修改视图而不执行任何类型的业务逻辑,那么在视图中包含代码是可以的.您更改字体大小的示例是视图中完美无缺的代码的主要示例(并且会增加ViewModel中的噪声,使其更难理解和维护).从本质上讲,如果你使用触发器,你已经做了一些,所以它并不奇怪.
但请记住,如果使用单元测试,则很难测试那一点视图逻辑.如果您需要测试,最好将它放在viewmodel中.