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

标签 .net wpf mvvm binding

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

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

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

目前我坚持以下规则:

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

您认为我的方法怎么样?

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

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

最佳答案

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

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

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

但请记住,如果您使用单元测试,则测试该 View 逻辑将非常困难。如果您需要对其进行测试,最好将其放入 View 模型中。

关于.net - WPF MVVM 使用命令与事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/705099/

相关文章:

c# - 远程调试托管应用程序

c# - 如何创建空字符串?

c# - 读取 Json 文件时不支持给定路径的格式

c# - 重用 Menu.ItemContainerStyle

WPF 工具提示 ControlTemplate 不显示内容

c# - 如何将特定操作传递给 View 模型以在按下按钮时执行?

c# - .NET 中的最小消息大小公钥加密

c# - 使用查询字符串设置下拉列表中的选择

c# - WPF 在异步等待模式中使用 MVVM 和 WCF

swift - Swift Bond 中 model 和 viewModel 的绑定(bind)