Design patterns 在MVVM中,ICommand实现负责什么?执行还是调用?

Design patterns 在MVVM中,ICommand实现负责什么?执行还是调用?,design-patterns,mvvm,icommand,Design Patterns,Mvvm,Icommand,问题很简单。在MVVM中,ICommand实现是负责执行CanExecute和Execute逻辑,还是调用驻留在ViewModel控制下的逻辑 我这样问是因为当我尝试在ICommand实现中实现逻辑时,感觉命令和ViewModel以及其他对象之间有很多紧密耦合。但是,当我尝试仅从ICommand实现调用方法时,我会感觉到,对于相当于方法调用的内容,我有很多多余的代码。我认为,如果我更清楚ICommand实现的单一责任,这个问题就会自行解决 逻辑还是调用?调用 它是从视图调用的ViewModel中

问题很简单。在MVVM中,ICommand实现是负责执行CanExecute和Execute逻辑,还是调用驻留在ViewModel控制下的逻辑

我这样问是因为当我尝试在ICommand实现中实现逻辑时,感觉命令和ViewModel以及其他对象之间有很多紧密耦合。但是,当我尝试仅从ICommand实现调用方法时,我会感觉到,对于相当于方法调用的内容,我有很多多余的代码。我认为,如果我更清楚ICommand实现的单一责任,这个问题就会自行解决

逻辑还是调用?

调用

它是从视图调用的ViewModel中的占位符。然后,它应该指导您在正确的情况下(可以执行)使用正确的方法(执行)


MVVM比其他方法更冗长,编写锅炉代码可能有点烦人,但得到的回报相当大。

还值得注意的是,一个常见的错误是使用实现级命令名,而不是函数式命令名。例如,如果您想在单击时刷新列表,我看到人们将该命令标记为“MouseClick”,并将其绑定到鼠标左键上。这是错误的;命令应该描述它的功能效果,然后绑定应该为您提供上下文。在本例中,鼠标单击事件应绑定到ListRefresh命令。