我理解在MVVM中:
所以 ViewModel如何响应用户在视图上执行的操作,例如在TextBox中键入内容或移动滑块等
我知道这是通过 RoutedEvents 完成的,但我发现几乎所有的RoutedEvent示例都在View中使用CodeBehind,这正是你在MVVM中不再拥有的。
这样就留下了 RoutedCommands ,我在MVVM中找到了更多的例子,例如从这个意义上来说,移动滑块确实不是命令,它是一个事件,所以我想知道这是否真的应该使用。
然后我read advice,例如“在MVVM中尽可能少地使用RoutedEvents ,没有RoutedCommands 。“好的。
所以离开,例如在WPF团队自己的WPF Model-View-ViewModel Toolkit 0.1项目中你有一个“ DelegateCommand ”,这看起来也很有趣。
然后有些人也在使用“ RelayCommand ”。
对于开发应用程序这样核心的事情,这是很多选择和困惑。
使用Code Behind ,在MVVM中做过去十年我们所做的最好的方法是什么?
答案 0 :(得分:11)
需要明确的是,当人们提到 DelegateCommand 和 RelayCommand 时,他们真的在谈论同样的事情:ICommand的一个实现,它允许你传递一个委托。你可以互换使用它们。
就我而言,让你的视图(XAML)绑定到ViewModel中的DelegateCommands是实现MVVM的最佳方式。
尽可能远离RoutedEvents和代码隐藏。
答案 1 :(得分:6)
对于按钮和其他触发器,我使用WPF提供的ICommand接口,其方式与链接到的DelegateCommand类似。 (实际上我使用了定义的here)
的中继命令当您更改值(移动滑块,键入文本框)时,请使用绑定并在设置ViewModel中的属性时处理行为。
通常我发现在MVVM应用程序中使用RoutedEvents的理由很少,但是当你无法通过新的WPF特定方法实现你想要的东西时,它们是一个很好的,熟悉的舒适毯。