我试图理解这个概念,但它一直在躲避我。
这背后的总体概念是什么?我知道这是可能的,但我并没有完全按照我的研究/自己的测试项目来做。
在我的视图中,我想不惜一切代价避免代码隐藏。我想将诸如"PreviewMouseDown"之类的事件从视图中解耦,并让它们触发ViewModel中的命令。
有人能给我一些关于如何做到这一点的基本指导吗?
摘要:
View(PreviewMouseDown)->调用ViewModel中的命令(MyPreviewMousDownCommand)
感谢
冒着被否决的风险,我不认为这是世界上最糟糕的事情
public void PreviewMouseDown(Object sender, RoutedEventArgs e)
{
var viewModel= (MyViewModel)DataContext;
if (viewModel.MyCommand.CanExecute(null))
viewModel.MyCommand.Execute(null);
}
这通常通过某种形式的附加属性或(混合)行为来处理。
例如,MVVM Light包含一个EventToCommand Behavior,它允许您将任何事件路由到XAML中的ICommand
,而不添加代码隐藏。
这一切都是关于命令和绑定的。但我鼓励您更好地使用一个为您提供管道的框架。如果你想要View first策略,你可以按照Reed的建议使用MVVM Light。但是,如果你想要ViewModel优先的方法(我个人认为这更容易理解),那么我建议你使用Caliburn Micro。
无论如何,如果你想清理代码,你最终会使用事件到命令或交互库(来自Blend SDK)。