我实际上在学习MVVM模式。
我无法理解关于命令的一件事。为何使用它们?为什么不使用调用View
函数的函数(在ViewModel
中)?什么命令提供给我们?显然它们被广泛使用,但我无法找到原因。
答案 0 :(得分:6)
为什么要使用命令?
因为命令提供封装。您可以在ICommand
中隐藏任何类型的复杂逻辑,并且可以在需要时交换实现。这样你的View就不需要了解你的ViewModel等方法。它只需要知道ViewModel提供了一个操作“x”的命令。
许多框架元素(如ICommand
,Button
等)支持更多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()
,改变其价值。
顺便说一下,在其他答案中描述了这种模式的使用语义。