WPF中的命令(Command)

    这节来讲一下WPF中的命令(Command)的使用。

【认识Command】

    我们之前说过,WPF本身就为我们提供了一个基础的MVVM框架,本节要讲的命令就是其中一环,通过在ViewModel中声明命令,从View中使用Binding绑定命令,就能实现从View到ViewModel之间操作的流通。

    ICommand 接口:

    所有的命令都是需要继承ICommand接口,该接口有如下三个成员:

9e707ee133e4aeded47ba90e07294ff1.png

    我们先说第二个成员,它是个返回值为bool的方法,通过这个方法,可以设置命令能不能继续执行,即返回值为TRUE,命令继续执行,返回值为FALSE命令不会执行;

    第一个成员是个事件处理器,从名字可以看出来该事件处理器关注于第二个成员,也就是当命令能否执行的状态出现改变时可以使用此事件通知到关注此命令执行状态的成员;

    第三个成员也是个方法,命令的执行逻辑放在这个方法里边,当CanExecute返回值为TRUE时,该方法才会被执行。

【自定义Command】

    下面我们就来自定义一个命令,这样能比较方便的演示命令的使用:

    本节以MVVM模式演示,项目结构如下:

a14efd55882de8804fbaa0c715eaa52f.png

    MyCommand为自定义的命令类,代码如下:

b985a12c12055a242628b54f55d54645.png

    MyCommand类在实例化时需要外部传入执行的方法以及能否继续执行的判断方法。

    MainViewModel中的代码如下:

df035eabf5fc749491c22849f83b178a.png

    在ViewModel中声明命令要注意,命令必须是属性,不能是字段。

    View代码如下:

d9532d93dabdb8cc8f6abaab8f463962.png

    在Button有个Command属性,我们可以直接使用Binding和ViewModel中的命令对象做绑定。

    此处要注意MainView的构造方法中这一行代码:

5731d415aa25b4c54a96d05528837a25.png

    DataContext属性要设置为ViewModel实例,这样View才能跟ViewModel关联上,从而使用Binding才能绑定上MyCommand命令。

    另外需要知道的是,Button中的Command是通过点击触发的,也就是说当你点击的Button命令就会执行,其它的控件,如ListBox中的Item,需要双击才能执行命令,因为单击是选中Item。

    当程序运行时,点击按钮,输出窗口会打印“命令被执行了”字样:

7df83b5d63801d98708eae9a348d7d80.png

    然后我们清除掉输出窗口的内容,当再一次点击按钮时,因为isCanExec被设置为FALSE,所以命令终止执行,输出窗口无内容:

4a7eceb989d966dd2834f3811e946415.png

4247e82c205b24afb0a889ef11bf615b.png

【命令参数CommandParameter】

    如果命令仅仅是这样使用,那就太单调了,大家肯定注意到了Execute和CanExecute方法还有个类型为object的参数,这个参数就是命令参数,它可以接收我们自定义的数据,在执行命令时传入进来,我们则可以根据这个参数,对执行逻辑做多样化的判断,下面我将代码稍作改变:

    在界面上放置两个按钮,并修改ViewModel代码为如下所示:

5497be1c6840de86ecaff3e3a66f1c72.png

    在Button中使用CommandParameter属性设置命令的参数,默认会将数据当做string处理,当然它也可以使用Binding跟其它属性做绑定,关于View与ViewModel之间的数据绑定,我们后期讲解。

269e2517907d826e7442583ca0f20799.png

    在MyCommand的执行逻辑中判断参数的值,从而输出不同的结果,一次点击按钮结果如下:

bab7947dc7e4d1d147e80e7ef4dd0b28.png

本节到此结束,今天是1024程序员节,祝大家节日快乐!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296541.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP中 对象自动调用的方法:__set()、__get()、__tostring()

总结: (1)__get($property_name):获取私有属性$name值时,此对象会自动调用该方法,将属性name值传给参数$property_name,通过这个方法的内部 执行,返回我们传入 的私有属性的值。 &am…

xhprof php性能分析工具

先安装libpng*下载安装xhprofwget http://pecl.php.net/get/xhprof-0.9.2.tgztar zxf xhprof-0.9.2.tgzcd xhprof-0.9.2cp -r xhprof_html xhprof_lib cd extensionphpize./configuremakemake install编辑php.ini[xhprof]extensionxhprof.so;; directory used by default imple…

matlab中给图像加几个矩形框_没想到!PPT中的这个效果,用好了,简直就是渣图美化器...

相信大家一定看到过,透过磨砂玻璃呈现在眼前的景色,是不是有种朦胧美?其实,在PPT中你也可以复刻出这样的效果。例如,这样的PPT页面:把背景虚化掉,更加突出主题。你想知道PPT中的磨砂效果&#x…

【转贴】mysql导入数据load data infile用法

mysql导入数据load data infile用法 基本语法:load data [low_priority] [local] infile file_name txt [replace | ignore]into table tbl_name[fields[terminated byt][OPTIONALLY] enclosed by ][escaped by\ ]][lines terminated byn][ignore number lines][(co…

宝贝,我帮你清了购物车哦!

1 一场意外让本不富裕的女朋友雪上加霜甚至还回复了单身▼2 外甥女去参加舅舅的婚礼发现账本上没有她的名字于是写上自己的名字并随了兜里所有的钱人情世故整的明明白白▼3 我感觉再多吹几首他们就能复合......▼4 在家隔离第N天果然天下沙雕是一家▼5 我猜中了开头但没猜…

Dapr牵手.NET学习笔记:Actor小试

Actor模型是一种避免线程共享数据,相同Actor实体串行化的方案,所以不便dapr的其他功能,几乎都是非编程入侵的,相反,Dapr Acror深度定制的,关于Actor,.net中有一些通用框架,比如Akka.…

认识Linux下的各种系统服务

只要是linux系统、不管什么发行版本,都有以下的系统服务。本文将对这些服务逐一进行说明。推荐花一些时间来了解这些服务的作用,以便清楚的知道自己该使用哪些服务。 NetworkManager, NetworkManagerDispatcherNetworkManager是一个后台服务程序&#xf…

黄聪:wordpress如何开启文章格式post format

发现很多“古老”的WordPress主题使用量非常大,虽然部分也在随着WordPress版本的升级而“升级”,只不过是修复了bug而已,wordpress的新特性并没有使用。而且多数国内的wordpress主题制作者,也都是在这些主题的基础上进行创作&…

11没有源码注释_我们为什么要看源码、应该如何看源码?

看源码的意义看源码只是一种方法、手段,而不是目的。我也曾经给自己制定过“阅读xxx源码”的目标,现在看起来真的很蠢,一点不smart(specific、measurable、attainable、relevant、time-bound)。只有搞清楚了阅读代码的…

如果你没空读书,就一定要来看看这8个公众号!

全世界只有3.14 % 的人关注了爆炸吧知识不管世界变化多块,阅读仍是个不过时的动作。今天就为大家推荐几个优质公众号,从社会热点、读书成长、生活新知,你的碎片化时间,我们包了!一起来看看呀~♥长按二维码,…

03Prism WPF 入门实战 - Region

1.概要源码及PPT地址:https://github.com/JusterZhu/wemail视频地址:https://www.bilibili.com/video/BV1KQ4y1C7tg?sharesourcecopyweb(1)Prism概览Application:我们开发应用程序,初始化Bootstrapper。Bo…

CentOS利用crontab执行计划任务

walker的需求是每天1点钟的时候,执行一个shell脚本,下面记录walker用到的基本功能。1、安装yum install crontabs2、服务相关/sbin/service crond status #查看任务状态 /sbin/service crond start #启动服务 /sbin/service crond stop …

10月Web服务器调查:Apache下降 Ngnix攀升

来自netcraft的消息,在2010年10月份的Web服务器市场调查中,在232,839,963个网站中,仍有69.8%的站点在使用 Apache服务器,相比于上个月,其市场份额增长了大约1个百分点,Ngnix也有较小幅度的增长,…

四元数左乘右乘_四元数、欧拉角学习笔记个人理解

一、背景知识:点乘、叉乘复数的点乘:(aibjck)•(xiyjzk)-(axbycz)复数的叉乘:(aibjck)(xiyjzk)(ax)ii(ay)ij(az)ik(bx)ji(by)jj(bz)jk(cx)ki(cy)kj(cz)kkijk三轴定义如上图所示。满足右手螺旋定则:(这个不是太明白,但是…

Python深度学习029:pytorch中常用的模块或方法

PyTorch是一个广泛使用的深度学习库,提供了许多用于构建和训练神经网络的模块和方法。下面是一些PyTorch中常用的模块和方法的简要介绍: PyTorch常用模块和方法 torch 用途:PyTorch的基础模块,提供了多种数学运算功能。常用方法: torch.tensor():创建张量torch.randn():…

struts2 标签不能使用EL 表单式

<c:forEach items"${requestScope.dataitemList}" var"item" varStatus"i" >//使用c:set 标签注意使用Scope属性 不然在request里面取不到值。 <s:select id"type%{#attr.i.index}" name"dataitemType" list"…

【转载】Android设计中的.9.png

转载自&#xff1a;腾讯ISUX (http://isux.tencent.com/android-ui-9-png.html) 在Android的设计过程中&#xff0c;为了适配不同的手机分辨率&#xff0c;图片大多需要拉伸或者压缩&#xff0c;这样就出现了可以任意调整大小的一种图片格式“.9.png”。这种图片是用于Android开…

如果你没空看书,我强烈建议你做这件事!

知乎上有个高赞问题&#xff1a;有哪些书看完后&#xff0c;会让人后悔没早看到&#xff1f;答案各有不一、包罗万象。但有一点&#xff0c;大家达成了共识&#xff1a;要多读书。人生漫长&#xff0c;而我们都不会是一成不变的&#xff0c;真正决定人与人之间的差距的&#xf…

为什么应该在业务层实现管道模式,而不用ASP.NET Core Middleware实现 | 2点原因和实现方式...

前言ASP.NET Core的Middleware&#xff08;中间件&#xff09;就是使用了管道模式&#xff1a;Request&#xff08;请求&#xff09;在管道中传递&#xff0c;依次经过管道中的每一个MiddleWare进行处理。MiddleWare就像一层层的“滤网”&#xff0c;过滤所有的请求和响应。这种…

McAfee:较之中国美国黑客才最令人害怕

据McAfee研究发现美国是最有可能的网络攻击来源&#xff0c;而不是人们印象中广泛认为的中国或者俄罗斯。 McAfee进行了这么一项研究&#xff0c;组织来自各个国家的600位IT安全主管进行讨论&#xff0c;为他们最关注的互联网安全问题定级和归类&#xff0c;大部分报告都是符合…