我试图理解这个概念,但它让我难以理解。
这背后的一般概念是什么?我知道这是可能的,但我并没有完全按照我的研究/自己的测试项目来做到这一点。
我想在我的视图中不惜一切代价避免代码落后。我想从视图中分离诸如“PreviewMouseDown”之类的事件,并让它们触发 ViewModel 中的命令。
谁能给我一些有关如何完成此任务的基本指导?
概括:
查看 (PreviewMouseDown) -> 在 ViewModel (MyPreviewMouseDownCommand) 中调用命令
谢谢
有被否决的风险我认为这不是世界上最糟糕的事情
public void PreviewMouseDown(Object sender, RoutedEventArgs e)
{
var viewModel= (MyViewModel)DataContext;
if (viewModel.MyCommand.CanExecute(null))
viewModel.MyCommand.Execute(null);
}
这通常通过某种形式的Attached Property或(Blend) Behavior来处理。
例如,MVVM Light 包含一个EventToCommand 行为,它允许您将任何事件路由到ICommandXAML 中,而无需添加任何代码。
这都是关于Commanding和Binding的。但我会鼓励您更好地使用为您提供管道的框架。如果您想查看第一个策略,您可以按照Reed的建议使用 MVVM Light。但是,如果您想要 ViewModel 第一种方法(我个人发现它更容易理解),那么我建议您使用Caliburn Micro。
无论如何,如果您想清理代码隐藏,您最终将使用 Event to Command 或 Interactivity Library(来自 Blend SDK)。