EventToCommand

在WPF中,并不是所有控件都有Command,例如TextBox,那么当文本改变,我们需要处理一些逻辑,这些逻辑在ViewModel

中,没有Command如何绑定呢?这个时候我们就用到EventToCommand,事件转命令,可以将一些事件例如TextChanged,Checked等

转换成命令的方式。

不带参数的EventToCommand

AppView.xaml

       <CheckBox>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<command:EventToCommand Command="{Binding CheckedCommand}"></command:EventToCommand>
</i:EventTrigger>
<i:EventTrigger EventName="Unchecked">
<command:EventToCommand Command="{Binding UnCheckedCommand}"></command:EventToCommand>
</i:EventTrigger>
</i:Interaction.Triggers>
</CheckBox>

AppViewModel.cs

        public RelayCommand CheckedCommand
{
get;
set;
} public RelayCommand UnCheckedCommand
{
get;
set;
} public AppViewModel()
{
CheckedCommand = new RelayCommand(Checked); UnCheckedCommand = new RelayCommand(UnChecked);
} private void Checked()
{
MessageBox.Show("Checked");
} private void UnChecked()
{
MessageBox.Show("Unchecked");
}

带参数的EventToCommand

AppView.xaml

        <Button Width="100" Height="30" Margin="0,100,0,0">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<command:EventToCommand Command="{Binding ShowTxtCommand}" PassEventArgsToCommand="True" CommandParameter="Hello"></command:EventToCommand>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>

AppViewModel.cs

        /// <summary>
/// 显示消息命令
/// </summary>
public RelayCommand<string> ShowTxtCommand
{
get;
set;
} public AppViewModel()
{
ShowTxtCommand=new RelayCommand<string>(ShowMsg);
} /// <summary>
/// 命令具体实现
/// </summary>
private void ShowMsg(string msg)
{
MessageBox.Show(msg);
}

转换传递的参数

也许你想知道事件是谁触发的,从而进行一些业务逻辑,那么我们需要从IEventArgsConverter继承

EventArgsConverter.cs

public class EventArgsConverter : IEventArgsConverter
{
public object Convert(object value, object parameter)
{
var args = (RoutedEventArgs)value;
var btn = parameter as Button; return btn.Name;
}
}

AppView.xaml

   <Button Width="100" Height="30" Margin="0,100,0,0" x:Name="btn">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<command:EventToCommand Command="{Binding ShowNameCommand}" EventArgsConverter="{StaticResource ArgsConverter}" EventArgsConverterParameter="{Binding ElementName=btn}" PassEventArgsToCommand="True"></command:EventToCommand>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>

AppViewModel.cs

    public RelayCommand<string> ShowNameCommand
{
get;
set;
} public AppViewModel()
{ ShowNameCommand = new RelayCommand<string>(ShowName);
} private void ShowName(string name)
{
MessageBox.Show(name);
}

看了EventToCommand的源码,并没有什么帮助,我猜测它的实现是这样的,EventToCommand属于附加

属性,它就能获取到它所附加的对象即控件本身,然后它还能Binding命令,比如我们附加的对象是Button

,那么就在它的Click事件时,触发Command命令,同样,有条件判断Command是否能执行时,可以设置

控件的IsEnabled属性。

EventToCommand的更多相关文章

  1. MVVM Command Binding: InvokeCommandAction v.s. EventToCommand

    This gives you the ability to create a trigger on an event and bind it to an ICommand on the view mo ...

  2. EventToCommand is not found in MVVMLight

    xmlns:Command="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras.WP8& ...

  3. UWP中新加的数据绑定方式x:Bind分析总结

    UWP中新加的数据绑定方式x:Bind分析总结 0x00 UWP中的x:Bind 由之前有过WPF开发经验,所以在学习UWP的时候直接省略了XAML.数据绑定等几个看着十分眼熟的主题.学习过程中倒是也 ...

  4. MVVM TextBox的键盘事件

    MVVM下RichTextBox的键盘回车事件设置为发送,不是回车 xmlns:i="http://schemas.microsoft.com/expression/2010/interac ...

  5. WPF自定义控件第二 - 转盘按钮控件

    继之前那个控件,又做了一个原理差不多的控件.这个控件主要模仿百度贴吧WP版帖子浏览界面左下角那个弹出的按钮盘.希望对大家有帮助. 这个控件和之前的也差不多,为了不让大家白看,文章最后发干货. 由于这个 ...

  6. WPF自定义控件第一 - 进度条控件

    本文主要针对WPF新手,高手可以直接忽略,更希望高手们能给出一些更好的实现思路. 前期一个小任务需要实现一个类似含步骤进度条的控件.虽然对于XAML的了解还不是足够深入,还是摸索着做了一个.这篇文章介 ...

  7. WPF根据Oracle数据库的表,生成CS文件小工具

    开发小工具的原因: 1.我们公司的开发是客户端用C#,服务端用Java,前后台在通讯交互的时候,会用到Oracle数据库的字段,因为服务器端有公司总经理开发的一个根据Oracle数据库的表生成的cla ...

  8. MVVM框架下,WPF实现Datagrid里的全选和选择

    最近的一个项目是用MVVM实现,在实现功能的时候,就会有一些东西,和以前有很大的区别,项目中就用到了常用的序号,就是在Datagrid里的一个字段,用checkbox来实现. 既然是MVVM,就要用到 ...

  9. MvvmLight ToolKit 教程

    MvvmLightToolKit MvvmLightToolKit的源代码是托管在CodePlex上的,我们 可以从这里获取最新版本的源代码,不仅源码,版本发布的日志,更改了哪些,修复了哪些,以及一些 ...

随机推荐

  1. java语言中除数为零问题

    在以下几个例子中,输出结果如何? float aa=0; System.out.println(aa/0); System.out.println(1/aa); System.out.println( ...

  2. Ajax实现简单下拉选项

    基本都是固定步骤!主要在JAVASCRIPT和PHP中的操作 1.HTML代码里就只有两个SELECT标签如下: <select id="province"> < ...

  3. VS中如何快捷地给自己的代码添加创建信息注释

    VS中如何快捷地给自己的代码添加创建信息注释 Intro 以下讨论的都是没有使用 GIT 来管理源代码的情况,如果使用 GIT 管理源代码可直接使用VS的Git扩展就不需要考虑以下问题. 什么是创建信 ...

  4. SharePoint 2013 Designer系列之自定义列表表单

    在SharePoint的使用中,默认的样式过于单调经常困扰着我们,其实,SharePoint使用Designer工具,可以很轻松解决这一问题,制作出各式各样漂亮的页面.下面,让我们简单介绍下这一过程. ...

  5. iOS之开发支付功能概述

    前言:本随笔将对IOS开发的支付功能进行一个概述. 内容大纲: 一.常见的支付方案简介 二.第三方支付SDK 三.苹果官方支付方案 四.Web支付方案 正文: 一.常见的支付方案简介 在微信支付中 微 ...

  6. couchDB文档

    每个文档都是自包含的数据单元,是一系列数据项的集合. 每个数据项都有一个名称与对应的值,值既可以是简单的数据类型,如字符串.数字和日期等:也可以是复杂的类型,如有序列表和关联对象. 每个文档都有一个全 ...

  7. spring mvc生成注册验证码

    通过Spring MVC为系统添加验证码 1:布局登陆页面,用户名,密码,填写验证码的文本框,及验证码的图片及点击换图 <%@ taglib prefix="c" uri=& ...

  8. SQL SERVER中隐式转换的一些细节浅析

    其实这是一篇没有技术含量的文章,精通SQL优化的请绕道.这个缘起于在优化一个SQL过程中,同事问了我一个问题,为什么SQL中存在隐式转换,但是执行计划没有变? 我思索了一下,觉得这个问题也有点意思,说 ...

  9. Oracle常用语句集合

    oracle常用经典SQL查询 常用SQL查询: .查看表空间的名称及大小 )),) ts_size from dba_tablespaces t, dba_data_files d where t. ...

  10. 大数据系列(3)——Hadoop集群完全分布式坏境搭建

    前言 上一篇我们讲解了Hadoop单节点的安装,并且已经通过VMware安装了一台CentOS 6.8的Linux系统,咱们本篇的目标就是要配置一个真正的完全分布式的Hadoop集群,闲言少叙,进入本 ...