WPF的有些UI元素有Command属性可以直接实现绑定,如Button

但是很多Event的触发如何绑定到ViewModel中的Command呢?

答案就是使用EventTrigger可以实现。

继续上一篇对Slider的研究,在View中修改Interaction.

            <i:Interaction.Triggers><i:EventTrigger EventName="ValueChanged"><i:InvokeCommandAction Command="{Binding ValueChangedCommand}" /></i:EventTrigger></i:Interaction.Triggers>

那么如果将EventName修改为Thumb.DragCompleted 后发现这个事件并不会被触发
原因是:Because the command is hooked up to the Slider, but the event is fired on the Thumb。

(参考:http://stackoverflow.com/questions/14331272/issue-with-thumb-dragstarted-event-with-mvvmlight)

参考上述链接中Tom Allen的方法后可以实现, 但是这个方法并没有很好的遵守MVVM模式。

于是接着研究,既然DragCompleted是挂在Thumb上面的,那么为何不直接和Thumb 绑定呢?

修改Slider的ControlTemplate, 在Track控件中的Thumb中绑定Event 成功!

    <UserControl.Resources><ControlTemplate x:Key="trackThumb" TargetType="{x:Type Slider}"><Border Background="{TemplateBinding Background}"BorderBrush="{TemplateBinding BorderBrush}"BorderThickness="{TemplateBinding BorderThickness}"><Grid><Track x:Name="PART_Track"><Track.Thumb><Thumb Width="10"><i:Interaction.Triggers><i:EventTrigger EventName="DragCompleted"><i:InvokeCommandAction Command="{Binding ValueChangedCommand}" /></i:EventTrigger></i:Interaction.Triggers></Thumb></Track.Thumb></Track></Grid></Border></ControlTemplate></UserControl.Resources>

参考:

http://social.technet.microsoft.com/wiki/contents/articles/18199.event-handling-in-an-mvvm-wpf-application.aspx

http://www.codeproject.com/Articles/274982/Commands-in-MVVM#example9

转载于:https://www.cnblogs.com/DreamRecorder/p/9849986.html

WPF中MVVM模式的 Event 处理相关推荐

  1. WPF中Mvvm模式的理解

    1. Mvvm是什么,Mvvm是怎么来的? Mvvm模式广泛应用在WPF项目开发中,使用此模式可以把UI和业务逻辑分离开,使UI设计人员和业务逻辑人员能够分工明确. Mvvm模式是根据MVP模式来的, ...

  2. WPF中MVVM模式(简略介绍)

    MVVM模式主要是为了实现视图和逻辑的分离,下面介绍一下完整实例: ① 首先是在数据部分,即Model层.在此定义AuthorVO类,其中包括所用的基本属性. public class AuthorV ...

  3. CleanAOP实战系列--WPF中MVVM自动更新

    CleanAOP实战系列--WPF中MVVM自动更新 作者: 立地 邮箱: jarvin_g@126.com QQ: 511363759 CleanAOP介绍:https://github.com/J ...

  4. 【WPF】MVVM模式的3种command

    原文:[WPF]MVVM模式的3种command 1.DelegateCommand 2.RelayCommand 3.AttachbehaviorCommand 因为MVVM模式适合于WPF和SL, ...

  5. js架构设计模式——由项目浅谈JS中MVVM模式

    1.    背景 最近项目原因使用了durandal.js和knockout.js,颇有受益.决定写一个比较浅显的总结. 之前一直在用SpringMVC框架写后台,前台是用JSP+JS+标签库,算是很 ...

  6. 由项目浅谈JS中MVVM模式

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.    背景 最近项目原因使用了durandal.js和knock ...

  7. WPF采用MVVM模式(绑定:纯前台、命令:触发器绑定命令)

    MVVM绑定 view-viewModel-model,模型介绍省略,就是创建类,添加字段封装属性.注:控件的绑定只能绑定到属性上,不能绑定到字段上: 接下来就是代码 (view): 1 <Wi ...

  8. WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍...

    WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正 ...

  9. C# WPF MVVM模式下在主窗体显示子窗体并获取结果

    01 - 前言 在winform中打开一个新的子窗体很简单,直接实例化窗体并show一下就可以: Form2 f2 = new Form2();f2.Show(); 或者 Form2 f2 = new ...

最新文章

  1. 程序猿,如果下次有人让你帮忙开发App,你就这样回答他
  2. 这3句屁话,关键时刻能救命
  3. winpcap 发送数据包
  4. python学习笔记8--socket编程
  5. 《C++ Primer 5th》笔记(4 / 19):表达式
  6. faster rcnn resnet_RCNN, Fast R-CNN 与 Faster RCNN理解及改进方法
  7. Cell | 大规模多组织转录组学研究揭示长非编码RNA与人类复杂疾病的联系
  8. rango php,韩天峰(Rango)的博客
  9. 关于Chrome Devtools你可能有所不知的几个技巧
  10. 工作中线程池使用不当的问题记录(get是阻塞式的)
  11. 软件安全测试培训大纲
  12. 计算机键盘按不动怎么办,电脑键盘上档键怎么失灵
  13. 如何实现网页视频聊天?
  14. 基于 SLS 构建 RDS 审计合规监控
  15. 不是技术牛人,如何进去自己梦想的公司
  16. JavaScript实现简单星星闪烁特效
  17. Hinton最新演讲:前向-前向神经网络训练算法
  18. 建博会网红打卡地的幕后推手,竟来自这个团队
  19. 【XMind学习笔记02】 你不得不知的5大功能
  20. ubuntu 16.04 内存清理方法总结

热门文章

  1. java setcontenttype_response.setContentType()在Java过滤器中重置
  2. html5中音频的标签,html5中的音频标签安全
  3. mysql 5.0 乱码,解决MySQL 5.0.16的乱码问题
  4. matlab多项式加法运算,matlab多项式运算与代数方程求解解析.ppt
  5. python 修改array_python 基础_ 数组的 增删改查3
  6. 管理员以标准权限运行时
  7. 数据结构--数组实现线性表
  8. postgresql对于HashJoin算法的Data skew优化与MCV处理
  9. 【C++ grammar】引用
  10. 使用ThreadLocal绑定连接资源(事务)