坚持坚持MVVM模式?

the*_*guy 2 wpf mvvm

我正在构建WPF应用程序并首次使用MVVM.整体使用MVVM非常有趣,其中一个主要好处是视图和模型类之间的良好分离.有些学科(至少是年轻的开发者)不要将它们混合在一起.

我们有一个场景,在确认消息框之后需要在按钮单击时关闭窗口.现在,这可以通过处理按钮单击事件并关闭Window类本身中的窗口来实现旧方法.或者我们可以通过在ViewModel中创建命令来实现MVVM方式,调用Window来显示消息框.etc.

我理解这里需要做什么,但我的问题是 - 是否有必要在所有情况下使用MVVM命令?是否有例外我们不应该使用命令,例如简单的UI操作?我们不是在这里过度使用MVVM吗?MVVM方式的所有好处到底是什么?

slu*_*ter 7

或者我们可以通过在ViewModel中创建命令来实现MVVM方式,调用Window来显示消息框.etc.

让我分开来看,主要是因为我觉得IMVHO一直都做错了 - 很多人试图在VM中做太多.首先,问问自己这个问题:

提示是否以任何方式与数据或业务规则相关?

如果不是,那就是"你真的确定吗?" 类型提示,那么这应该完全在视图后面的代码中完成.viewmodel需要知道或采取任何操作的唯一时间是它实际上与viewmodel有关,在这种情况下你应该从VM公开命令,但实际的窗口关闭仍然是从后面的代码完成的的观点.

VM应该对它所绑定的视图一无所知,这是MVVM模式的目的之一.它可以公开命令,但它不应该知道用户已经与特定UI元素1进行了交互,并且它不应该直接知道该窗口即将被关闭.VM可以提示(通过对话服务,你确实有,是吗?)当前数据是未保存的,但它一般不知道窗口,因为它不知道它的数据是怎样的呈现.

有时你会走一条细线,很容易过分析是否应该完全从视图中完成某些事情,纯粹来自VM,或者两者的混合.如果你还记得VM的角色,并且记住在视图中可以使用代码(假设它只执行与视图相关的内容并将VM内容交给VM),那么99%的时间你都不会有一个问题.

1例如,VM不应该知道或关心用户是否只是单击按钮,超链接或触摸图像中的热点.可以使用相同的命令来处理任何此类命令.