WPF使用MVVM(三)-事件转命令

上一节介绍了WPF中的命令,可是仅仅介绍的是WPF框架给我们提供的点击命令,也就是用Command属性来绑定一个命令,用来响应按钮的点击行为!显然这是不够的,界面中除了点击行为以外,还有很多其他行为,诸如鼠标移入鼠标移出。。。

下面我们就将介绍一下,如何为这些行为绑定命令。

为其他行为绑定命令

在为其他行为绑定命令的时候呢,我们需要引入一个外部的dll文件,叫做System.Windows.Interactivity.dll,直接打开NuGet包管理器,搜索、安装到项目中即可:

在安装包的过程中可以看到,此包已经不受维护了,但是不影响我们此次的演示。

下面我们就将演示鼠标移入行为,实现鼠标移入按钮,按钮字体颜色改变的效果

首先需要为Xaml界面中引入一下上面安装包的命名空间:

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"

接下来,我们去到之前Button按钮的位置,改成如下结构:

        <Button
x:Name="btnUpdate"
Grid.Row="3"
Grid.ColumnSpan="2"
Margin="20"
Command="{Binding ClickAction}"
CommandParameter="{Binding RelativeSource={RelativeSource Mode=Self}}"
Content="更新一下信息"
FontSize="30"
FontWeight="Bold">
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseEnter">
<i:InvokeCommandAction
Command="{Binding MouseEnterAction}"
CommandParameter="{Binding ElementName=btnUpdate}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>

这里演示的是将MouseEnter事件绑定到命令MouseEnterAction

注意,这里给Button按钮添加了一个Name属性,叫做btnUpdate,是为了方便传参的时候,绑定此按钮,将此按钮当作参数传入到后台!

然后我们去到MainWindowVM(ViewModel)中,实现好我们的命令,这里实现的跟之前一样,是一个带参数的命令:

        /// <summary>
/// 命令要执行的方法
/// </summary>
void UpdateColorExecute(object sender)
{
Button button =sender as Button;
button.Foreground = Brushes.Red;
} /// <summary>
/// 命令是否可以执行
/// </summary>
/// <returns></returns>
bool CanUpdateColorExecute()
{
return true;
}
/// <summary>
/// 创建新命令
/// </summary>
public ICommand MouseEnterAction
{
get
{
return new RelayCommand<object>(UpdateColorExecute, CanUpdateColorExecute);
}
}

接下来就看演示看到,鼠标移入的时候,按钮字体颜色被修改了!

结语

到这里MVVM系列的说明就结束了,这几篇文章举例的部分可能过于简单,甚至有些包都停止维护了,针对你日常的工作可能并没有太大的帮助,重点还是了解一下MVVM以及如何使用他们。

后续可能会介绍一种特定的MVVM框架,尽量描述出工作中可能出现的情况或存在的问题!

见解

虽然MVVM能够方便的实现数据的绑定,但是在前期的构建过程中也算是比较麻烦的,至于是否一定要使用MVVM,以及在任何地方都采用MVVM,还是自己决定,不过有些情况下采用MVVM模式反而会显得更加复杂,此时采用传统方案也是非常不错的!

感谢你看到这里!

WPF使用MVVM(三)-事件转命令的更多相关文章

  1. WPF使用MVVM(二)-命令绑定

    WPF使用MVVM(二)-命令绑定 上一节已经介绍了WPF的属性绑定,这使得我们只需要指定界面的DataContext,然后就可以让界面绑定我们的属性数据呢. 但是上一节还遗留了一个问题就是我们的按钮 ...

  2. Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)

    jquery提供的serialize方法能够实现. $("#searchForm").serialize();但是,观察输出的信息,发现serialize()方法做的是将表单中的数 ...

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

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

  4. WPF之事件绑定命令

    目录 事件绑定意义 无参数的事件绑定 带EventArgs参数的事件绑定 使用事件绑定 扩展:基于InvokeCommandAction源码的实现(推荐) 参考资料 事件绑定意义 一般事件的处理程序都 ...

  5. 【我们一起写框架】MVVM的WPF框架(三)—数据控件

    这世上,没人能一次性写出完美无缺的框架:因为,任何一个框架都需要项目的淬炼,然后才能升华,趋近完美. 所以,框架是个反复修改的东西,最终形成的东西. 如果你学了一点技术,觉得自己可以写出框架了,觉得自 ...

  6. MVVM 事件转命令1

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

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

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

  8. js架构设计模式——你对MVC、MVP、MVVM 三种组合模式分别有什么样的理解?

    你对MVC.MVP.MVVM 三种组合模式分别有什么样的理解? MVC(Model-View-Controller)MVP(Model-View-Presenter)MVVM(Model-View-V ...

  9. WPF使用MVVM(一)-属性绑定

    WPF使用MVVM(一)-属性绑定 简单介绍MVVM MVVM是Model(数据类型),View(界面),ViewModel(数据与界面之间的桥梁)的缩写,是一种编程模式,优点一劳永逸,初步增加一些逻 ...

随机推荐

  1. golang中将函数当做函数参数使用

    package main import ( "fmt" "strings" ) // 使用type关键字让函数变成一个自定义类型 type caseFunc f ...

  2. golang中接口类型小案例

    1.  在项目中实现注册成功之后,向用户发送邮件.微信提醒 package main import "fmt" type IMessage interface { send() b ...

  3. java抽象类案例

    1 package face_09; 2 /* 3 * 雇员示例: 4 * 需求:公司中程序员有姓名,工号,薪水,工作内容. 5 * 项目经理除了有姓名,工号,薪水,还有奖金,工作内容. 6 * 对给 ...

  4. JavaScript设计原则与编程技巧

    1 设计原则概述 <UNIX/LINUX设计哲学>设计准则 ① 小既是美. ② 每个程序只做一件事情. ③ 快速建立原型. ④ 舍弃高效率而取可移植性. ⑤ 避免强制性的图形化界面交互. ...

  5. APC 篇——备用 APC 队列

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...

  6. CentOS升级polkit版本,解决 Linux Polkit 存在权限提升的漏洞 (CVE-2021-4034)

    漏洞描述 受影响版本的 pkexec 无法正确处理调用参数计数,最终尝试将环境变量作为命令执行,攻击者可以通过修改环境变量来利用此漏洞,诱使 pkexec 执行任意代码,从而导致将本地权限提升为 ro ...

  7. webStorm关于ESlint6语法格式化解决方案

    方式1: 下载ESLint6 格式化插件(格式化蛋痛,有点卡,而且必须先保存) 方式2:更改快捷键 在设置中,将下面这个格式化选项设置快捷键即可 到设置中的下面这个选项找修改即可

  8. 解决手机unauthorized错误

    手机:xiaomi-note(OS: Android 6.0) 手机开发者选项中USB调试已经打开,在电脑命令行下输入adb devices,显示手机未认证 D:\develop\androidroo ...

  9. 导出SQL语句

    转载请注明来源:https://www.cnblogs.com/hookjc/ if(!($db_conn=mysql_connect($db_server,$db_name,$db_pass))){ ...

  10. JS介绍、意义

    HTML和CSS 京东 网页.网站和应用程序 网页:单独的一个页面 网站:一些列相关的页面组成到一起 应用程序:可以和用户产生交互,并实现某种功能. 演示JavaScript的强大 http://im ...