WPF和MVVM.绑定事件

Dan*_* O. 8 wpf events binding mvvm icommand

我正在使用MVVM模式,RelayCommand等开发一个WPF应用程序.我在这个问题上阅读了很多,但我不清楚:

我想要做的就是移动一个形状,例如椭圆,然后捕捉它的最终位置,放入数据库.

但我不能将事件(MouseLetButtonDown,MouseLeftButtonUp和MouseMove)绑定到命令.我已经阅读了附加行为,但我需要事件的参数(MouseButtonEventArgs和MouseEventArgs)来检索位置.

解?

Ric*_*key 8

在编写MVVM图形应用程序时,很有可能尝试将所需的所有事件发送到视图模型.但是在命令中处理特定于视图的鼠标事件args与MVVM原则和松散耦合的目标相反.

解决此问题的方法是将操作抽象为视图可以执行的任务,然后通过操作和数据将其结果传递回视图模型.如果你想在代码隐藏中执行少量代码来支持这一点,MVVM警察将不会带你的孩子.但更好的方法是通过行为添加交互性.行为是可重用的功能,没有代码隐藏,可以很好地适应MVVM模式和需要交互性的应用程序,否则需要向XAML添加事件处理程序.

请参阅此处的答案,以获取使用鼠标事件拖动图形对象的行为的完整示例:

通过视图执行交互,视图模型可以坚持使用数据和命令.


pax*_*axx 2

这适用于 Silverlight,因此它应该适用于 WPF(或者至少应该进行一些小的修改)

<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<cmd:EventToCommand Command="{Binding MouseCommand, PassEventArgsToCommand="True", CommandParameter="{Binding}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
Run Code Online (Sandbox Code Playgroud)