我正在使用MVVM模式,RelayCommand等开发WPF应用程序。 我在这个问题上读了很多,但我不清楚:
我想要做的就是移动一个形状,例如椭圆,然后捕捉它的最终位置,放入数据库。
但是我无法将事件(MouseLetButtonDown,MouseLeftButtonUp和MouseMove)绑定到命令。我已经阅读了附加行为,但我需要事件的参数(MouseButtonEventArgs和MouseEventArgs)来检索位置。
解?
答案 0 :(得分:8)
在编写MVVM图形应用程序时,很有可能尝试将所需的所有事件发送到视图模型。但是在命令中处理特定于视图的鼠标事件args违反了MVVM原则和松散耦合的目标。
解决此问题的方法是将操作抽象为视图可以执行的任务,然后通过操作和数据将其结果传递回视图模型。如果你想在代码隐藏中执行少量代码来支持这一点,MVVM警察将不会带你的孩子。但更好的方法是通过行为添加交互性。行为是可重用的功能,没有代码隐藏,可以很好地适应MVVM模式和需要交互性的应用程序,否则需要向XAML添加事件处理程序。
请在此处查看我的答案,以获取使用鼠标事件拖动图形对象的行为的完整示例:
通过视图执行交互,视图模型可以坚持使用数据和命令。
答案 1 :(得分:2)
这适用于Silverlight,所以它应该适用于WPF(或至少应该稍作修改)
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<cmd:EventToCommand Command="{Binding MouseCommand, PassEventArgsToCommand="True", CommandParameter="{Binding}"/>
</i:EventTrigger>
</i:Interaction.Triggers>