本例的知识点,全在ViewModel中,看代码:

 1  public class MainWindowViewModel : BindableBase
2 {
3 private bool _isEnabled;
4 public bool IsEnabled
5 {
6 get => _isEnabled;
7 set
8 {
9 SetProperty(ref _isEnabled, value);
10 ExecuteDelegateCommand.RaiseCanExecuteChanged();
11 }
12 }
13
14 private string _updateText;
15 public string UpdateText
16 {
17 get => _updateText;
18 set => SetProperty(ref _updateText, value);
19 }
20
21
22 public DelegateCommand ExecuteDelegateCommand { get; private set; }
23
24 public DelegateCommand<string> ExecuteGenericDelegateCommand { get; private set; }
25
26 public DelegateCommand DelegateCommandObservesProperty { get; private set; }
27
28 public DelegateCommand DelegateCommandObservesCanExecute { get; private set; }
29
30
31 public MainWindowViewModel()
32 {
33 ExecuteDelegateCommand = new DelegateCommand(Execute, CanExecute);
34
35 DelegateCommandObservesProperty = new DelegateCommand(Execute, CanExecute).ObservesProperty(() => IsEnabled);
36
37 DelegateCommandObservesCanExecute = new DelegateCommand(Execute).ObservesCanExecute(() => IsEnabled);
38
39 ExecuteGenericDelegateCommand = new DelegateCommand<string>(ExecuteGeneric).ObservesCanExecute(() => IsEnabled);
40 }
41
42 private void Execute()
43 {
44 UpdateText = $"Updated: {DateTime.Now}";
45 }
46
47 private void ExecuteGeneric(string parameter)
48 {
49 UpdateText = parameter;
50 }
51
52 private bool CanExecute()
53 {
54 return IsEnabled;
55 }
56 }

构造函数中建立了4个命令。

其中,33行这个是原始的,CanExecute要靠10行的代码来通知改变。后面的三个,是使用语法糖

ObservesCanExecute(() => IsEnabled)实现了自动通知。
这里可以试一下,注释掉
ExecuteDelegateCommand.RaiseCanExecuteChanged();然后运行的话,勾选Enabled,其他三个命令都改变状态,而第一个按钮就没有收到变更通知。

39行构造的命令为泛型命令,支持一个泛型的参数。参数在xaml中使用CommandParammeter提供。

Prism Sample 11-UsingDelegateCommands的更多相关文章

  1. Android 主题动态切换框架:Prism

    Prism(棱镜) 是一个全新的 Android 动态主题切换框架,虽然是头一次发布,但它所具备的基础功能已经足够强大了!本文介绍了 Prism 的各种用法,希望对你会有所帮助,你也可以对它进行扩展, ...

  2. 从PRISM开始学WPF(六)MVVM(二)Command?

    从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Module? ...

  3. 从PRISM开始学WPF(六)MVVM(二)Command-更新至Prism7.1

    命令绑定(Command) [7.1updated]这一节除了基础app部分,并没有什么变化 什么是Command? 先看下微软官方的说明: Commanding is an input mechan ...

  4. [转]Blue Prism Architecture

    本文转自:https://mindmajix.com/blue-prism-architecture Introduction Automation technology is widely bloo ...

  5. Codeforces Round #342 (Div. 2) D. Finals in arithmetic(想法题/构造题)

    传送门 Description Vitya is studying in the third grade. During the last math lesson all the pupils wro ...

  6. 扩展GridView控件——为内容项添加拖放及分组功能

    引言 相信大家对GridView都不陌生,是非常有用的控件,用于平铺有序的显示多个内容项.打开任何WinRT应用或者是微软合作商的网站,都会在APP中发现GridView的使用.“Tiles”提供了一 ...

  7. Codeforces Round #342 (Div 2) 解题报告

    除夕夜之有生之年CF第一场 下午从奶奶家回到姥姥家,一看还有些时间,先吃点水果陪姥姥姥爷聊了会儿,再一看表,5:20....woc已经开场20分钟了...于是抓紧时间乱搞.. **A. Guest F ...

  8. Java编程思想读书笔记

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  9. 数据结构 : Hash Table

    http://www.cnblogs.com/lucifer1982/archive/2008/06/18/1224319.html 作者:Angel Lucifer 引子 这篇仍然不讲并行/并发. ...

  10. AC Milan VS Juventus(模拟)

    AC Milan VS Juventus Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Oth ...

随机推荐

  1. 输入一段字符(只含有空格和字母,保证开头不为空格),里面有若干个字符串,求这些字符串的长度和,并输出最长字符串内容,如果有多个输出最先出现的那个字符串。以stop作为最后输入的字符串。

    #include<stdio.h>#include<string.h>main(){    int i,j=0,m,count,max;    char a[100];     ...

  2. pycharm conmunity 2022.1没有mange repositories,只能使用命令方式修改镜像源(长期可信)

    https://blog.csdn.net/qq_43625764/article/details/124656990

  3. 服务器链接工具MobaXterm

    链接:https://pan.baidu.com/s/15zC4JC0XOKYI1lN5bkB3fw 提取码:9zc8 每次使用都需要输入密码.修改密码: 链接:https://pan.baidu.c ...

  4. centOS7 + MongoDB 3.6.22 集群搭建 - 切片+副本集 - 个人学习

    因为我是学习这个,所以是安装成功之后自己再记录一下过程,mongodb是重新安装的,参考博客:MongoDB 3.6.9 集群搭建 - 切片+副本集 1. 服务结构介绍 结构图: 结构图解: 1. S ...

  5. 什么是Placement new ?

    1. 什么是placementNew placement new的作用就是:创建对象(调用该类的构造函数)但是不分配内存,而是在已有的内存块上面创建对象.用于需要反复创建并删除的对象上,可以降低分配释 ...

  6. windows 安装mysql57

    1. 配置my.ini文件 在根目录下新建 "my.ini" 文件: 添加配置: [mysql] # 设置mysql客户端默认字符集 default-character-set=u ...

  7. k8s容器互联-flannel host-gw原理篇

    k8s容器互联-flannel host-gw原理篇 容器系列文章 容器系列视频 简析host-gw 前面分析了flannel vxlan模式进行容器跨主机通信的原理,但是vxlan模式需要对数据包进 ...

  8. python爬取今日的bing壁纸

    #!/usr/bin/python #你要的文件夹是 E://pics// ps:没有的话帮你建一个 import requests import os from datetime import da ...

  9. 美团面试:熟悉哪些JVM调优参数?

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...

  10. java多线程基础小白指南--synchronized同步块

    sychronized是java多线程非常关键的一个知识点,这篇博客将从synchronized几个用法以及代码来学习. sychronized的作用是能够保证同一时间只有一个线程来运行这块代码,达到 ...