【WPF】【MVVM】把鼠标事件写到Controller层
来源:互联网 发布:淘宝客费用怎么算 编辑:程序博客网 时间:2024/06/15 21:56
要使用Mouse Event,最快捷的方法便是前台控件直接绑定事件,然后再后台代码中实现。
在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的相互关系如下图:
0 0
- 【WPF】【MVVM】把鼠标事件写到Controller层
- WPF MVVM模式下如何把事件参数传入Viewmodel层
- 写接口Controller层
- WPF之鼠标事件
- WPF鼠标事件简介
- WPF 鼠标事件
- WPF鼠标事件简介
- WPF鼠标事件简介
- WPF鼠标事件
- WPF把参数信息写到文件中基本代码
- MVVM Silverlight 5 Datagrid MVVM 鼠标双击事件
- WPF中的鼠标事件详解
- WPF中的鼠标事件详解
- WPF listviewItem 鼠标双击事件
- WPF 中鼠标事件无效
- WPF-MVVM
- wpf-mvvm
- wpf mvvm
- MTK 65XX系列通过USB OTG添加Ethernet RJ45有线网卡支持
- Linux_Hi3518E开发_制作根文件系统镜像
- Ubuntu下安装beta版R报dpkg: dependency problems prevent configuration of r-recommended错误[已解决]
- Compound Words(复合词) UVA 10391
- OpenGL ES 2.0 笔记 - 特殊的内建变量
- 【WPF】【MVVM】把鼠标事件写到Controller层
- android源码集合989个实例 (从网上摘抄,在此记录下)
- 数组高级(排序和查找)
- 提高服务器并发量,有关系统配置的常规方法
- Ubuntu下运行Rcpp代码时R报dir.exsits()不存在的错误
- 加快从大容量的数据库中提取数据(查询)
- 链表存储,顺序存储
- Linux环境下系统安装JDK
- Windows云服务器传文件问题