为什么在 MVVM 中使用命令

Why use commands in MVVM

我实际上是在学习 MVVM 模式。

我对命令一窍不通。为什么要使用它们?为什么不直接使用调用 ViewModel 函数的函数(在 View 中)?给我们什么命令?显然它们被广泛使用,但我找不到原因。

Why use commands?

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

不仅如此 ICommand 接口还受到许多框架元素的支持,例如 ButtonMenuItem 等。当您拥有 ICommand 时,您可以将其绑定到视图--它将负责执行命令。

Why don't just use a function (in the View) which call a ViewModel's function?

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

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

分离视图和逻辑的另一个主要优点是您可以轻松地对逻辑进行单元测试(在视图模型和模型中)。

使用 ICommand 的另一个好处是它的 bool CanExecute() 方法。您可以监视和控制状态并定义可以调用 ICommand 的条件。另外,例如,如果 CanExecute() returns 为假(不要忘记每次调用 ICommand 的 CanExecuteChanged() 方法属性(y/ies),影响 CanExecute(),改变 its/their 值)。 顺便说一下,其他答案中描述了这种模式的用法语义。