MVVM模式解析和在WPF中的实现(三)命令绑定

时间:2022-09-03 07:56:06

MVVM模式解析和在WPF中的实现(三)

命令绑定

系列目录:

MVVM模式解析和在WPF中的实现(一)MVVM模式简介

MVVM模式解析和在WPF中的实现(二)数据绑定

MVVM模式解析和在WPF中的实现(三)命令绑定

MVVM模式解析和在WPF中的实现(四)事件绑定

MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信

MVVM模式解析和在WPF中的实现(六)用依赖注入的方式配置ViewModel并注册消息

0x00 命令绑定要达到的效果

命令绑定要关注的核心就是两个方面的问题,命令能否执行和命令怎么执行。也就是说当View中的一个Button绑定了ViewModel中一个命令后,什么时候这个Button是可用的,按下Button后执行什么操作。解决了这两个问题基本就实现了命令绑定。另外一个问题就是执行过程中需要的数据(参数)要如何传递。本次主要探讨这几个问题。

0x01 命令绑定的实现

自定义一个能够被绑定的命令需要实现ICommand接口。该接口包含:

public event EventHandler CanExecuteChanged // 在命令可执行状态发生改变时触发

public bool CanExecute(object parameter) //检查命令是否可用的方法

public void Execute(object parameter)  //命令执行的方法

那么要如何实现这个接口呢?那得先搞明白这个接口是干什么用的。MSDN上是这么说的:

https://msdn.microsoft.com/zh-cn/library/system.windows.input.icommand(v=vs.110).aspx

我总结了一下大概是这样的

MVVM模式解析和在WPF中的实现(三)命令绑定

CanExecute和Execute方法是接口给出的,我们要做的就是新建一个类MyCommand来实现这两个方法执行的内容。可以通过在MyCommand的构造函数中传入Action<object>和Func<object,bool>,让CanExecute执行Func<object,bool>,Execute执行Action<object>。实现后MyCommand结构如下图所示,其中浅绿色背景的为ICommand接口的实现,浅蓝色背景的为MyCommand的成员。

MVVM模式解析和在WPF中的实现(三)命令绑定

0x02 添加泛型支持的命令MyCommand<T>

命令绑定时经常需要传参数,这种情况下可以给MyCommand添加泛型支持

MVVM模式解析和在WPF中的实现(三)命令绑定

0x03 命令绑定示例

有了MyCommand类,我们就可以在ViewModel中创建一个MyCommand对象,然后在View中绑定了。示例如下:

MVVM模式解析和在WPF中的实现(三)命令绑定

0x03 相关下载

示例代码: https://github.com/durow/TestArea/tree/master/MVVMTest/CommandTest


更多内容欢迎访问我的博客:http://www.durow.vip

MVVM模式解析和在WPF中的实现(三)命令绑定的更多相关文章

  1. MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息

    MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ...

  2. MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信

    MVVM模式解析和在WPF中的实现(五) View和ViewModel的通信 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 M ...

  3. WPF 中使用MVVM模式后,找回ListBox中的ListBoxItem元素

    ListBoxItem lstitem = this.list.ItemContainerGenerator.ContainerFromItem(m) as ListBoxItem; 其中this.l ...

  4. WPF中PasswordBox控件无法绑定Password属性解决办法

    在WPF中,默认的Password控件的Password属性是不允许为之绑定的,下面是一个解决绑定Password的方法的代码: 1.前台代码 <Window x:Class="Pas ...

  5. MVVM模式应用 之在ViewModel中使用NavigationService

    在ViewModel.cs页面中是不能使用NavigationService,那该怎么实现跳转呢? 其实在ViewModel中实现页面的跳转也很简单,下面的代码: using Microsoft.Ph ...

  6. WPF入门教程系列十七——WPF中的数据绑定&lpar;三&rpar;

    四. XML数据绑定 这次我们来学习新的绑定知识,XML数据绑定.XmlDataProvider 用来绑定 XML 数据,该XML数据可以是嵌入.Xmal文件的 XmlDataProvider 标记中 ...

  7. wpf中UserControl的几种绑定方式

    我们经常会抽取一些可重用的控件,某个属性是否需要重用,直接决定了这个属性的绑定方式. 1.完全不可重用的控件 有一些与业务强相关的控件,它们的属性完全来自ViewModel,越是相对复杂的控件,越容易 ...

  8. WPF中,多key值绑定问题,一个key绑定一个界面上的对象

    问题说明: 当用到dictionary<key,value>来储存数据的时候,有时候需要在界面上绑定一个key来显示value,这时候有两种思路: 一种是写一个自定义的扩展类,类似Bind ...

  9. MVVM模式和在WPF中的实现(二)数据绑定

    MVVM模式解析和在WPF中的实现(二) 数据绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...

随机推荐

  1. 最简单的基于FFMPEG的音频编码器(PCM编码为AAC)

    http://blog.csdn.net/leixiaohua1020/article/details/25430449 本文介绍一个最简单的基于FFMPEG的音频编码器.该编码器实现了PCM音频采样 ...

  2. &lbrack;leetcode-504-Base 7&rsqb;

    Given an integer, return its base 7 string representation. Example 1: Input: 100 Output: "202&q ...

  3. 探索JSP中的 &quot&semi;9大内置对象&excl;&quot&semi;

    1.什么是JSP内置对象? jsp内置对象就是Web容器创建的一组对象,我们都知道Tomcat可以看成是一种Web容器,所以我们可以知道所谓的内置对象Tomcat创建的,使用内置对象时可以不适用new ...

  4. 201521123001《Java程序设计》第2周学习总结

    本周学习总结 码云可以很方便地储存我们写好的代码,不用在写代码的时候担心没带U盘 Java中有许多已经写好的具有特定功能的一段独立小程序,不需要每一个函数都自己编写 Java的float型和C语言的不 ...

  5. win10和Ubuntu双系统安装过程中遇到的问题

    1.安装过程 注意分区问题,很重要 https://blog.csdn.net/baobei0112/article/details/77996570 https://blog.csdn.net/s7 ...

  6. 安装zookeeper遇到的问题

    最近在安装zookeeper的时候遇到了一个问题:调用./zkServer.sh start之后,使用命令telnet localhost 2181,显示访问被拒绝.然后使用netstat查看监听21 ...

  7. 算法模板学习专栏之总览(会慢慢陆续更新ing)

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/7495310.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  8. hihocoder1545 &colon; 小Hi和小Ho的对弈游戏(树上博弈&amp&semi;nim博弈)

    描述 小Hi和小Ho经常一起结对编程,他们通过各种对弈游戏决定谁担任Driver谁担任Observer. 今天他们的对弈是在一棵有根树 T 上进行的.小Hi和小Ho轮流进行删除操作,其中小Hi先手. ...

  9. Codeforces Round &num;394 &lpar;Div&period; 2&rpar; C&period;Dasha and Password(暴力)

    http://codeforces.com/contest/761/problem/C 题意:给出n个串,每个串的初始光标都位于0(列)处,怎样移动光标能够在凑出密码(每个串的光标位置表示一个密码的字 ...

  10. GAN背后的数学原理

      模拟上帝之手的对抗博弈——GAN背后的数学原理 简介 深度学习的潜在优势就在于可以利用大规模具有层级结构的模型来表示相关数据所服从的概率密度.从深度学习的浪潮掀起至今,深度学习的最大成功在于判别式 ...