原文:(WPF, MVVM) Event 处理

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

(WPF, MVVM) Event 处理相关推荐

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

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

  2. WPF MVVM实例三

    在没给大家讲解wpf mwm示例之前先给大家简单说下MVVM理论知识: WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时 ...

  3. C# WPF MVVM项目实战(进阶②)

    这篇文章还是在之前用Caliburn.Micro搭建好的框架上继续做的开发,今天主要是增加了一个用户窗体ImageProcessView,然后通过Treeview切换选择项之后在界面显示不同效果的图片 ...

  4. WPF MVVM设计模式的ViewModelBase和CommandBase代码

    ViewModelBase和CommandBase代码的整理如下: 1.ViewModelBase.cs [c-sharp] view plaincopy using System; using Sy ...

  5. C# WPF MVVM 实战 – 3 – 树结构

    树结构放在 WPF ,有大家熟悉的 TreeView.Menu / MenuItem 等等,自定义的话它是 HierarchicalDataTemplate. 用上 MVVM 模式,视图与数据分离,意 ...

  6. WPF MVVM从入门到精通1:MVVM模式简介

    WPF MVVM从入门到精通1:MVVM模式简介 原文:WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通2:实现一个登录 ...

  7. wpf mvvm模式下CommandParameter传递多参

    wpf mvvm模式下CommandParameter传递多参 原文:wpf mvvm模式下CommandParameter传递多参 CommandParameter一般只允许设置一次,所以如果要传递 ...

  8. C# WPF MVVM模式Prism框架下事件发布与订阅

    01 - 前言 处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信,Prism提供了一种事件机制,可以在应用程序中低耦合的模块之间进行通信,该机制基于事件聚合器服务,允许发布者和订阅者之间通过事 ...

  9. C# WPF MVVM模式Prism框架从零搭建(经典)

    01 - 前言 目前最新的PRISM的版本是8.1.97,本节以6.3.0.0 讲解,可以在Github上获取PRISM的源码. Prism Github地址:https://github.com/P ...

最新文章

  1. 限制php解析、user_agent、php相关配置
  2. 如何在 CentOS 7 上安装 Nginx
  3. 工业互联网 — TSN — Overview
  4. Centos mysql的安装和配置
  5. 【ZZ】字符编码笔记:ASCII,Unicode和UTF-8
  6. long long or int
  7. kbmmw中向服务器端传递对象的一种简单方式
  8. ASP.NET MVC多语言 仿微软网站效果(转)
  9. win2008 401 - 未授权: 由于凭据无效,访问被拒绝。解决方法
  10. 无论如何,你该在大城市再坚持下
  11. python双层for循环实现全排列_Python循环实现n的全排列功能
  12. 【教程】CoreAVC+Haali安装及设置简易教程(KMPlayer)(4)
  13. 防止后缀aol.com}AOL勒索病毒*** .com}AOL勒索病毒解密工具处理方法
  14. 【GNURadio实验报告】实验2-使用GNURadio仿真OOK信号
  15. 跃迁:化学系女生的工程师之路
  16. Pytorch tutorial pytorch 入门
  17. NI multism 设计单脉冲发生器实验报告
  18. SpringBoot Zxing _ Java 生成二维码(可内嵌图片)
  19. 7、Chrome插件
  20. Eclipse 插件

热门文章

  1. 两种方式调试JNI中DLL(动态链接库)
  2. PHP下实现两种ajax跨域的解决方案之jsonp
  3. 使用Docker打包发布Django应用
  4. 原因以及如何避免产生僵尸进程
  5. TCP拥塞控制算法 — CUBIC的补丁(四)
  6. 用一句SQL取出第 m 条到第 n 条记录的方法
  7. 月薪6万的腾讯产品经理是什么水平?
  8. PMCAFF产品众测 | 对话随手攒CEO聊聊这款产品的设计、推广和改进(活动已结束)
  9. 复盘无人业态的三点心得:起于共享单车,止于何?
  10. 【5分钟一本书】暗时间:用时间管理把握产品的进度条