Prism Sample 11-UsingDelegateCommands
本例的知识点,全在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的更多相关文章
- Android 主题动态切换框架:Prism
Prism(棱镜) 是一个全新的 Android 动态主题切换框架,虽然是头一次发布,但它所具备的基础功能已经足够强大了!本文介绍了 Prism 的各种用法,希望对你会有所帮助,你也可以对它进行扩展, ...
- 从PRISM开始学WPF(六)MVVM(二)Command?
从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Region? 从PRISM开始学WPF(四)Prism-Module? ...
- 从PRISM开始学WPF(六)MVVM(二)Command-更新至Prism7.1
命令绑定(Command) [7.1updated]这一节除了基础app部分,并没有什么变化 什么是Command? 先看下微软官方的说明: Commanding is an input mechan ...
- [转]Blue Prism Architecture
本文转自:https://mindmajix.com/blue-prism-architecture Introduction Automation technology is widely bloo ...
- 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 ...
- 扩展GridView控件——为内容项添加拖放及分组功能
引言 相信大家对GridView都不陌生,是非常有用的控件,用于平铺有序的显示多个内容项.打开任何WinRT应用或者是微软合作商的网站,都会在APP中发现GridView的使用.“Tiles”提供了一 ...
- Codeforces Round #342 (Div 2) 解题报告
除夕夜之有生之年CF第一场 下午从奶奶家回到姥姥家,一看还有些时间,先吃点水果陪姥姥姥爷聊了会儿,再一看表,5:20....woc已经开场20分钟了...于是抓紧时间乱搞.. **A. Guest F ...
- Java编程思想读书笔记
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 数据结构 : Hash Table
http://www.cnblogs.com/lucifer1982/archive/2008/06/18/1224319.html 作者:Angel Lucifer 引子 这篇仍然不讲并行/并发. ...
- AC Milan VS Juventus(模拟)
AC Milan VS Juventus Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Oth ...
随机推荐
- tuxedo How To Disable Server Side Trace Which IS Enabled BY Client?
影响版本: Oracle Tuxedo - Version 8.1 to 11.1.1.2.0Information in this document applies to any platform. ...
- getopt函数使用说明
一.查询linux命令手册: #include<unistd.h> #include<getopt.h> /*所在头文件 */ int getopt(intargc, char ...
- JSP基础语法笔记一
JSP是一种脚本语言. 代码片段,方法内容: <% 代码片段 %> <jsp:scriptlet> 代码片段 </jsp:scriptlet> 设置编码格式,正常显 ...
- Python实现方便的读入数字
众所周知,python只能读字符串,你如果要读整数只能读一个字符串,split成列表,再用int或者float转换. 比如这样 s=input().split() a,b=map(int,s) #或者 ...
- Javaweb学习笔记第七弹
Maven依赖范围 对于Maven的安装配置等环境准备问题,可详细参考我的前几篇博客, 网址1:https://www.cnblogs.com/liuzijin/p/16654344.html 网址2 ...
- 别再傻傻分不清 AVSx H.26x MPEG-x 了
在音视频发展的历程中,编解码无疑是其最核心的功能,编解码标准的更新换代也极大促进了音视频技术的发展以及行为模式的变更.从电视到网络视频以及现在的网络直播.点播.音视频会议等等,这些变化的背后都离不开音 ...
- 【超详细】Ubuntu 20.04 安装 Apache+PHP网页环境 图文教程,常见问题和解决方案
本文将介绍在Ubuntu20.04 LTS环境下安装Apache的全过程,针对其中可能出现的一些坑也会提供解决方案. 作者:Eriktse 简介:19岁,211计算机在读,现役ACM银牌选手力争以通俗 ...
- fork语句遇见for循环语句
一.没有automatic的fork-join_none 通常小白会这么写: 代码如下: foreach(a[i]) begin fork repeat(a[i]) #1ns; $display(&q ...
- node-sass与node版本对照图
- vue使用keep-alive出现的的activated和deactivated生命周期
<keep-alive>包裹的动态组件会被缓存,它是一个抽象组件,它自身不会渲染一个dom元素,也不会出现在父组件链中.当组件在 <keep-alive> 内被切换,它的 ac ...