让我们将按钮Command属性绑定到自定义命令。
什么时候应该实现ICommand,什么时候从RoutedCommand派生?我看到RoutedCommand实现了ICommand。
在这种情况下,我可能需要实现一个ICommand?MVVM模型呢?哪个更适合这个目的?
发布于 2009-07-16 12:34:28
正如您已经注意到的,班级是ICommand接口的实现,如果它的功能类似于RoutedEvent,则它的主要区别是
CanExecute上的RoutedCommand和Execute方法不包含命令的应用程序逻辑,就像典型的ICommand那样,而是引发跨元素树寻找具有CommandBinding的对象的事件。附加到CommandBinding的事件处理程序包含命令逻辑。 Execute方法引发PreviewExecuted和执行的事件。CanExecute方法引发PreviewCanExecute和CanExecute事件。
在不需要RoutedCommand行为的情况下,您将看到自己的ICommand实现。至于MVVM模式,我不能说这是一个解决方案,似乎每个人都有自己的方法。然而,下面是我遇到的一些解决这个问题的方法:
发布于 2009-07-16 12:49:28
对于Rich的回答,我要补充的唯一一点是,RoutedCommands (以及他们更为流行的后代RoutedUICommand )必须用事件处理程序连接起来才能正确工作。
我遇到的大多数MVVM实现都试图利用针对ViewModel的绑定,因此ViewModel (而不是视图)拥有CanExecute/Execute逻辑。
相反,事件处理程序将该负担移至视图。然后,处理可以传播到ViewModel,但这意味着ViewModel和视图(强制转换+方法调用等)之间的耦合程度要稍高一些。
https://stackoverflow.com/questions/1135983
复制相似问题