MVVM中的事件而不是命令?

Has*_*him 6 .net wpf command code-behind mvvm

MVVM的各种教程中经常指出,MVVM的目标不是消除代码隐藏,并且在代码隐藏中可能仍然需要一些事件处理.

您需要在代码隐藏中编写事件而不是在viewmodel中使用命令的场景是什么?

Bol*_*ock 6

通常,如果您的代码与UI逻辑有关,请将其保存在视图的XAML或代码隐藏中.视图模型仅负责在视图和模型之间桥接和绑定数据.

在我的一个问题中可以找到一个例子,如何通过拖动扩展窗口框架使WPF窗口可移动?我使用的一个事件是SourceInitialized,我在其中访问Window窗口句柄以执行一些Windows API魔术.但所有这些都与窗口有关,并且与窗口之外的应用程序逻辑无关,因此我将其全部限制在窗口的代码隐藏文件中,使视图模型完全不知道它.


Toa*_*yen 5

在我看来,在MVVM中,当与UI相关的事件(如动画)时,您可以在代码隐藏文件中编写.

所有业务逻辑都应该在视图模型中.


Had*_*ari 5

根据我的经验,使用不支持MVVM绑定的第三方控件将导致在代码隐藏文件中编写代码.即使对于简单的用法,例如选择当前项目,读取当前选择的项目等,这也应该发生,这在控制中应该相当简单,但是没有.

这样的示例是Silverlight TreeView控件的SelectedItem属性,而不是DependencyProperty(可绑定)是一个常规属性,因此您无法绑定到.

同样正如@BoltClock所提到的,有时候将一些代码置于代码后面似乎是合乎逻辑的,这些代码实际上与视图的作用有关,并且与视图"后面"的逻辑无关.最好将这些逻辑放在代码隐藏中.