为什么在MVVM中使用命令

时间:2015-05-20 07:33:39

标签: .net mvvm icommand

我实际上在学习MVVM模式。

我无法理解关于命令的一件事。为何使用它们?为什么不使用调用View函数的函数(在ViewModel中)?什么命令提供给我们?显然它们被广泛使用,但我无法找到原因。

2 个答案:

答案 0 :(得分:6)

  

为什么要使用命令?

因为命令提供封装。您可以在ICommand中隐藏任何类型的复杂逻辑,并且可以在需要时交换实现。这样你的View就不需要了解你的ViewModel等方法。它只需要知道ViewModel提供了一个操作“x”的命令。

许多框架元素(如ICommandButton等)支持更多MenuItem接口。当您拥有ICommand时,可以将其绑定到视图 - 它将负责执行命令。

  

为什么不使用调用ViewModel的函数(在View中)   功能

因为我们不想混淆责任。 View不应该有任何逻辑,它只是一个愚蠢的事情,它只是向用户显示数据。没有了。

假设您的视图中有逻辑。有一天,你的经理可以说我们不再需要这个UI了(看起来不太好)。让它变得有吸引力。不仅必须重新设计视图,还需要在View中重复逻辑。这是重复的工作(针对DRY原则),可能会因为你的UI已经改变等而引入新的错误。

分离View和Logic的另一个主要优点是您可以轻松地对Logic进行单元测试(在ViewModel和Model中)。

答案 1 :(得分:2)

使用ICommand的另一个好处是它的bool CanExecute()方法。您可以监视和控制状态并定义可以和将要调用ICommand的条件。另外,例如,Button绑定ICommand会自动禁用,如果CanExecute()返回false(每次财产时都不要忘记调用ICommand的CanExecuteChanged()方法(y / ies),影响CanExecute(),改变其价值。 顺便说一下,在其他答案中描述了这种模式的使用语义。