Wpf 鼠标向下、预览鼠标向下等。。。MVVM中的命令绑定

Wpf 鼠标向下、预览鼠标向下等。。。MVVM中的命令绑定,wpf,mvvm,binding,command,mousedown,Wpf,Mvvm,Binding,Command,Mousedown,我试图理解这个概念,但我一直在逃避 这背后的一般概念是什么?我知道这是可能的,但根据我的研究/自己的测试项目,我并不完全了解如何做到这一点 在我看来,我想不惜一切代价避免代码落后。我希望将“PreviewMouseDown”等事件与视图分离,并让它们触发ViewModel中的命令 有谁能给我一些基本的指导如何做到这一点 总结: 查看(PreviewMouseDown)->调用ViewModel中的命令(MyPreviewMouseDownCommand) 谢谢这通常通过某种形式的or来处理 例如

我试图理解这个概念,但我一直在逃避

这背后的一般概念是什么?我知道这是可能的,但根据我的研究/自己的测试项目,我并不完全了解如何做到这一点

在我看来,我想不惜一切代价避免代码落后。我希望将“PreviewMouseDown”等事件与视图分离,并让它们触发ViewModel中的命令

有谁能给我一些基本的指导如何做到这一点

总结:

查看(PreviewMouseDown)->调用ViewModel中的命令(MyPreviewMouseDownCommand)


谢谢

这通常通过某种形式的or来处理


例如,MVVM Light包含一个允许您将任何事件路由到XAML中的
ICommand
,而不添加任何代码延迟。

冒着被否决的风险,我不认为这是世界上最糟糕的事情

public void PreviewMouseDown(对象发送方、路由目标方)
{
var viewModel=(MyViewModel)DataContext;
if(viewModel.MyCommand.CanExecute(null))
viewModel.MyCommand.Execute(null);
}
这一切都是关于和的。但我会鼓励您更好地使用一个为您提供管道的框架。如果您想要视图优先策略,您可以按照建议使用MVVM Light。但是,如果您想要ViewModel first方法(我个人认为这更容易理解),那么我建议您使用


无论如何,如果你想彻底清除代码隐藏,你最终会使用事件到命令或交互库(来自Blend SDK)。

Codebehind不是一个可怕的罪恶。使用codebehind可以很容易地解决一些任务。MVVM模式的主要思想是不允许VM对视图了解太多。视图不能与模型无关。如果您的codebehind仅适用于视图,那么就可以了。即使它依赖于VM,它仍然可以。另一个选项是使用Blend SDK的EventTrigger和InvokeCommandAction。与EventToCommand相比,它的缺点是InvokeCommandAction不允许将事件参数作为参数传递给命令。谢谢大家的宝贵建议。