在项目中使用Command绑定能够使我们的代码更加的符合MVVM模式。不了解的同学可能不清楚,只有继承自ButtonBase类的元素才可以直接绑定Command(Button、CheckBox、RadioButton等)

<Button Content="Normal" Command="{Binding NormalEventCommand}" ></Button>

如果我们要处理Label或者其他的一些控件,那么只能在走事件:

<Label Content="Label Event" MouseDoubleClick="Label_MouseDoubleClick_1"></Label>

这样的话,我们不得不在窗体类中处理事件代码和部分逻辑,这样就无法得到干净的MVVM模式了,那么我们应该怎么做呢?

Blend为我们提供了解决方案,我们安装Blend以后,便可以获取到System.Windows.Interactivity.dll,添加该dll到项目引用

<Window x:Class="WpfApplication1.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:vm="clr-namespace:WpfApplication1"
Title="Window2" Height="124" Width="214">
<Window.DataContext>
<vm:Window2ViewModel />
</Window.DataContext>
<Grid>
<Button Name="btn" Content="Button" Height="33" HorizontalAlignment="Left" Margin="40,24,0,0" VerticalAlignment="Top" Width="109">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<i:InvokeCommandAction Command="{Binding Command1}" CommandParameter="10" />
</i:EventTrigger>
<i:EventTrigger EventName="MouseMove">
<i:InvokeCommandAction Command="{Binding Command2}" CommandParameter="{Binding ElementName=btn}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Grid>
</Window>

需要注意Window标签中的

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity",这里相当于后台的using System;之类的加载程序集的功能

这样的我们,我们便可以处理所有目标元素的事件。

同样我们面对另外一个问题,我们是否可以绑定按键事件,并处理特定的键值命令呢?答案是肯定的,使用KeyBinding就可以了,同样还可以使用MouseBinding进行鼠标事件的处理。

        <TextBox Text="test">
<TextBox.InputBindings>
<KeyBinding Key="S" Modifiers="Alt" Command="{Binding KeyEventCommand}"></KeyBinding>
<MouseBinding Gesture="RightClick" MouseAction="LeftClick" Command="{Binding MouseEventCommand}"></MouseBinding>
</TextBox.InputBindings>
</TextBox>
<Label Content="test">
<Label.InputBindings>
<KeyBinding Key="S" Modifiers="Alt" Command="{Binding KeyEventCommand}"></KeyBinding>
<MouseBinding MouseAction="LeftClick" Command="{Binding MouseEventCommand}"></MouseBinding>
</Label.InputBindings>
</Label>

这里我们针对TextBox和Label进行了InputBindings的绑定。

需要注意的是:

1.InputBindings是个绑定集合InputBindingCollection,可以有多个MouseBinding和多个KeyBinding

2.KeyBinding绑定对象需要可聚焦,这里的Label由于无法聚焦,所以无法响应Alt+S事件

3.MouseBinding中Gesture的优先级高于MouseAction,当Gesture设置以后,LeftClick将失效

WPF中的Command事件绑定的更多相关文章

  1. 整理:WPF中应用附加事件制作可以绑定命令的其他事件

    原文:整理:WPF中应用附加事件制作可以绑定命令的其他事件 目的:应用附加事件的方式定义可以绑定的事件,如MouseLeftButton.MouseDouble等等 一.定义属于Control的附加事 ...

  2. EasyUI datagrid 明细表格中编辑框 事件绑定 及灵活计算 可根据此思路 扩展其他

    原创 : EasyUI datagrid 明细表格中编辑框 事件绑定 及灵活计算 可根据此思路 扩展其他 转载,请注明出处哦!谢谢! 原创 : EasyUI datagrid 明细表格中编辑框 事件绑 ...

  3. 在WPF中应用弱事件模式

    http://www.cnblogs.com/rickiedu/archive/2007/03/15/676021.html 在wpf中应用弱事件模式        感谢VS 的Intellisens ...

  4. 总结:WPF中MultiBinding多值绑定的方法

    原文:总结:WPF中MultiBinding多值绑定的方法 一.Xaml中绑定代码: <TextBlock  Grid.Row="5" Grid.Column="3 ...

  5. jquery中的DOM事件绑定与解绑

    在jquery事件中有时候有的事件只需要在绑定后有效触发一次,当通过e.target判断触发条件有效触发后解除绑定事件,来避免多次无效触发和与未知情况造成冲突. 这时候就要用到了jquery中的事件绑 ...

  6. WPF + Caliburn.Micro +ActionMessage事件绑定

    ActionMessage事件绑定是个人觉的算是CM的精髓了,比如说我在View里面放个button,我们要在他的click事件里面写东西,怎么写.如果是WPF我们直接在CS里面写就可以.但是CM不行 ...

  7. WPF中Image控件绑定到自定义类属性

    首先我们定义一个Student类,有ID,Name,Photo(保存图片路径). using System; using System.Collections.Generic; using Syste ...

  8. WPF中的路由事件(转)

    出处:https://www.cnblogs.com/JerryWang1991/archive/2013/03/29/2981103.html 最近因为工作需要学习WPF方面的知识,因为以前只关注的 ...

  9. WPF中自定义路由事件

    public class MyButtonSimple: Button { // Create a custom routed event by first registering a RoutedE ...

随机推荐

  1. 一步一步从原理跟我学邮件收取及发送 4.不同平台下的socket

    既然是面向程序员的文章那当然不能只说说原理,一定要有实际动手的操作.    其实作为我个人的经历来说,对于网络编程,这是最重要的一章! 作为一位混迹业内近20年的快退休的程序员,我学习过很多的开发语言 ...

  2. bat判断当前目录是否是根目录

    记录下,一遍查用. @echo offif "%~p0"=="\" (echo 在根目录) else echo 不在根目录pause

  3. dede 内容页文章标题显示不全的更改方法

    找到include/taglib/arclist.lib.php 1.$titlelen = AttDef($titlelen,30);换成$titlelen = AttDef($titlelen,2 ...

  4. Linux apache的运行用户和用户组

    我们在安装apache后,有时在上传文件的时候,提示没有权限或者是不可写,我们都会去查文件夹的权限. 通过ls -l /var/www/html/website可以很直观的看出我们文件和文件夹的权限, ...

  5. iOS 的ipa 包重新签名

    https://www.evernote.com/l/As7sxCnA85JCs7bn5Tg5St003gXYYslAk3k

  6. Ios8之后, 定位的delegate不能触发的问题

    if([CLLocationManager locationServicesEnabled]){ self.locationManage = [[[CLLocationManager alloc] i ...

  7. php微信扫码支付

    一 概述 扫码支付是商户系统按微信支付协议生成支付二维码,用户再用微信"扫一扫"完成支付的模式.该模式适用于PC网站支付.实体店单品或订单支付.媒体广告支付等场景.前几天公司需要做 ...

  8. SVN中服务器地址变更

    SVN中服务器地址变更后不需要重新导项目,只要修改下SVN的服务器地址,更新一下即可.有两种方法: 方法一:通过MyEclipse中SVN插件 1.选择window→show view→other→S ...

  9. 03_HTML Canvas第一天

    视频来源:麦子学院 讲师:刘慧涛 w3cshool之HTML5画布:http://www.w3school.com.cn/html5/html_5_canvas.asphtml5 canvas参考手册 ...

  10. apache编译安装参数说明

    apache编译安装参数说明 ./configure //配置源代码树--prefix=/usr/local/apache2 //体系无关文件的顶级安装目录prefix ,也就apache的安装目录. ...