【WPF】【MVVM】把鼠标事件写到Controller层
2017-01-05 12:51
225 查看
要使用Mouse Event,最快捷的方法便是前台控件直接绑定事件,然后再后台代码中实现。
在MVVM中,View层的后台代码无法调用Contrller层的函数。(反过来可以Controller –> ViewModel –> View)
需求:把鼠标事件写到Controller层中,以便于调用Controller层的函数。
采用WAF框架
前台控件绑定鼠标事件:
后台使用Command处理鼠标事件:
ViewModel中声明这个Command
Controller层实现这个Command的真正功能,关键代码:
通过以上办法,可以把所有的鼠标事件都搬到Controller层中,非常的方便!
小结:
做个思维导图总结一下,在WAF框架中,MVVM的相互关系如下图:
在MVVM中,View层的后台代码无法调用Contrller层的函数。(反过来可以Controller –> ViewModel –> View)
需求:把鼠标事件写到Controller层中,以便于调用Controller层的函数。
采用WAF框架
前台控件绑定鼠标事件:
<Image PreviewMouseMove="Image_PreviewMouseMove"/> <!-- 其他无关属性已省略 -->
后台使用Command处理鼠标事件:
private readonly Lazy<MyViewModel> viewModel; public MyWindow() { InitializeComponent(); viewModel = new Lazy<MyViewModel>(() => ViewHelper.GetViewModel<MyViewModel>(this)); } private void Image_PreviewMouseMove(object sender, MouseEventArgs e) { // 只能传一个参数 viewModel.Value.MyCommand.Execute(new object[] { sender, e }); }
ViewModel中声明这个Command
private ICommand myCommand; public ICommand MyCommand { get { return myCommand; } set { SetProperty(ref myCommand, value); } }
Controller层实现这个Command的真正功能,关键代码:
private readonly DelegateCommand myCommand; public MyController(...){ this.myCommand = new DelegateCommand(p => MyCommandDoWork((object[])p)); } public void Initialize() { myViewModel.MyCommand= myCommand ; } void MyCommandDoWork((object[])p){ object sender = p[0]; MouseButtonEventArgs e = p[1] as MouseButtonEventArgs; Image img = sender as Image; // todo...... }
通过以上办法,可以把所有的鼠标事件都搬到Controller层中,非常的方便!
小结:
做个思维导图总结一下,在WAF框架中,MVVM的相互关系如下图:
相关文章推荐
- wpf Canvas 对鼠标事件不响应的解决办法
- WPF 之 鼠标双击事件
- 从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator?
- WPF: 在 MVVM 设计中实现对 ListViewItem 双击事件的响应
- WPF,强制捕获鼠标事件,鼠标移出控件外依然可以执行强制捕获的鼠标事件
- WPF鼠标事件
- 从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator?
- WPF listviewItem 鼠标双击事件
- WPF: 在 MVVM 设计中实现对 ListViewItem 双击事件的响应
- WPF中MVVM模式下的按钮事件实现和依赖项通知
- WPF 容器控件的鼠标事件
- 【WPF开发备忘】使用MVVM模式开发中列表控件内的按钮事件无法触发解决方法
- 从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator?
- MVVM设计模式和在WPF中的实现(四) 事件绑定
- WPF中的鼠标事件详解
- 从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator?
- WPF-Listbox-ListboxItem双击事件实现-MVVM模式
- 从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator?
- WPF鼠标事件简介
- 从PRISM开始学WPF(七)MVVM(三)事件聚合器EventAggregator?