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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

黄聪: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…

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

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

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

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

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

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

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

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

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

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

缓存在哪里_什么是MyBatis缓存技术

MyBatis缓存引言在一个Web项目中,查询数据库中的操作算是一个非常常用的操作,但是有些数据会被经常性的查询,而每一次都去数据库中查询这些重复的数据,会很消耗数据库的资源,同时使得查询效率也很低,而 MyB…

WPF开发登录窗口之——窗口布局

WPF开发者QQ群: 340500857 | 微信群 -> 进入公众号主页 加入组织01—代码如下一、创建项目,命名为LoginWindow,然后创建以下目录结构:二、导入图片三、创建资源字典。一共创建四个:ButtonStyle、WindowStyle、Text…

这个偏僻的小山村竟出了12位博士28位硕士,高产“学霸”背后原因曝光......

全世界只有3.14 % 的人关注了爆炸吧知识考上大学留名祖宗祠堂今早,超模君刷微博的时候,有一则新闻吓得我虎躯一震——一个总共才2000多人小山村,竟然出了12位博士28位硕士。而且考上大学的孩子,他们的名字直接刻进祖宗祠堂。(微博…

牛顿新定律:凭本事得到的,凭什么要还?

后记事后,超模君提出用上帝开过光的真苹果来换回自己的苹果手机,但是惨遭牛顿君拒绝,理由是苹果手机更能激发他的创作灵感……面对这种鬼话,超模君敢怒不敢言。更惨的是,上帝说苹果手机不报销……艾萨克牛顿&#xff0…

04Prism WPF 入门实战 - Module

1.概要源码及PPT地址:https://github.com/JusterZhu/wemail视频地址:https://www.bilibili.com/video/BV1KQ4y1C7tg?sharesourcecopywebModule,具有特定功能,且独立存在则称为成为模块。下图为Prism体系中的关系结构图。在Prism体…

虚拟机(VMware Workstation)中,把连接网络的模式由“NAT模式”,改成“自动桥接模式”,网速大大的提升...

安装虚拟机,默认情况下,联网的模式是NAT,即跟主机是转发共用网络资源的,这样就非常慢,时常网页都打不开,现把它改成桥接模式,让它独立成为一台物理机,网速有大大的改善,设…

如何保持纯洁男女关系……

1 倒也没毛病▼2 差点以为是狗子!!▼3 大哥:我裤子没破!▼4 女朋友梦到了啥??▼5 忍不住了,嘻嘻嘻...(via.小风车车)▼6 亲爸爸!!▼7 哈哈哈…

【转】一个关于fork()的笔试题,考了好几遍,终于找到答案了

笔试至少3次见到这个题,都是瞎编的,今天群里有人问,然后有人放出了这个地址:http://coolshell.cn/articles/7965.html,让我恍然大明白,豁然好脾气。 感谢这位陈皓同学(名字很熟,不记…