(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 处理相关推荐
- WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍...
WPF自学入门(十一)WPF MVVM模式Command命令 在WPF自学入门(十)WPF MVVM简单介绍中的示例似乎运行起来没有什么问题,也可以进行更新.但是这并不是我们使用MVVM的正确方式.正 ...
- WPF MVVM实例三
在没给大家讲解wpf mwm示例之前先给大家简单说下MVVM理论知识: WPF技术的主要特点是数据驱动UI,所以在使用WPF技术开发的过程中是以数据为核心的,WPF提供了数据绑定机制,当数据发生变化时 ...
- C# WPF MVVM项目实战(进阶②)
这篇文章还是在之前用Caliburn.Micro搭建好的框架上继续做的开发,今天主要是增加了一个用户窗体ImageProcessView,然后通过Treeview切换选择项之后在界面显示不同效果的图片 ...
- WPF MVVM设计模式的ViewModelBase和CommandBase代码
ViewModelBase和CommandBase代码的整理如下: 1.ViewModelBase.cs [c-sharp] view plaincopy using System; using Sy ...
- C# WPF MVVM 实战 – 3 – 树结构
树结构放在 WPF ,有大家熟悉的 TreeView.Menu / MenuItem 等等,自定义的话它是 HierarchicalDataTemplate. 用上 MVVM 模式,视图与数据分离,意 ...
- WPF MVVM从入门到精通1:MVVM模式简介
WPF MVVM从入门到精通1:MVVM模式简介 原文:WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通1:MVVM模式简介 WPF MVVM从入门到精通2:实现一个登录 ...
- wpf mvvm模式下CommandParameter传递多参
wpf mvvm模式下CommandParameter传递多参 原文:wpf mvvm模式下CommandParameter传递多参 CommandParameter一般只允许设置一次,所以如果要传递 ...
- C# WPF MVVM模式Prism框架下事件发布与订阅
01 - 前言 处理同模块不同窗体之间的通信和不同模块之间不同窗体的通信,Prism提供了一种事件机制,可以在应用程序中低耦合的模块之间进行通信,该机制基于事件聚合器服务,允许发布者和订阅者之间通过事 ...
- C# WPF MVVM模式Prism框架从零搭建(经典)
01 - 前言 目前最新的PRISM的版本是8.1.97,本节以6.3.0.0 讲解,可以在Github上获取PRISM的源码. Prism Github地址:https://github.com/P ...
最新文章
- 限制php解析、user_agent、php相关配置
- 如何在 CentOS 7 上安装 Nginx
- 工业互联网 — TSN — Overview
- Centos mysql的安装和配置
- 【ZZ】字符编码笔记:ASCII,Unicode和UTF-8
- long long or int
- kbmmw中向服务器端传递对象的一种简单方式
- ASP.NET MVC多语言 仿微软网站效果(转)
- win2008 401 - 未授权: 由于凭据无效,访问被拒绝。解决方法
- 无论如何,你该在大城市再坚持下
- python双层for循环实现全排列_Python循环实现n的全排列功能
- 【教程】CoreAVC+Haali安装及设置简易教程(KMPlayer)(4)
- 防止后缀aol.com}AOL勒索病毒*** .com}AOL勒索病毒解密工具处理方法
- 【GNURadio实验报告】实验2-使用GNURadio仿真OOK信号
- 跃迁:化学系女生的工程师之路
- Pytorch tutorial pytorch 入门
- NI multism 设计单脉冲发生器实验报告
- SpringBoot Zxing _ Java 生成二维码(可内嵌图片)
- 7、Chrome插件
- Eclipse 插件