继承ICommand ,RelayCommand命令

 1 public class RelayCommand : ICommand
 2     {
 3         private readonly Action _execute;
 4         private readonly Func<bool> _canExecute;
 5         public event EventHandler CanExecuteChanged;
 6         public RelayCommand(Action execute) : this(execute, null)
 7         {
 8         }
 9         public RelayCommand(Action execute, Func<bool> canExecute)
10         {
11             if (execute == null)
12             {
13                 throw new ArgumentNullException("execute");
14             }
15             this._execute = execute;
16             this._canExecute = canExecute;
17         }
18         public void RaiseCanExecuteChanged()
19         {
20             EventHandler canExecuteChanged = this.CanExecuteChanged;
21             if (canExecuteChanged != null)
22             {
23                 canExecuteChanged.Invoke(this, EventArgs.Empty);
24             }
25         }
26         [DebuggerStepThrough]
27         public bool CanExecute(object parameter)
28         {
29             return this._canExecute == null || this._canExecute.Invoke();
30         }
31         public void Execute(object parameter)
32         {
33             this._execute.Invoke();
34         }
35     }

View Code

我们改变SaveCommand的CanExecute从false到true,而save命令执行的状态。CanExecuteChanged事件和客户端调用CanExecute方法,.在实践中,这将使一个“保存”按钮,该按钮被绑定到SaveCommand改变它的状态从禁用和重新启用。

 1 public class BlingViewModel
 2         {
 3             private DelegateCommand<object> _saveCommand;
 4             private bool _canSaveExecute = true;
 5             public ICommand SaveCommand
 6             {
 7                 get
 8                 {
 9                     if (_saveCommand == null)
10                     {
11                         _saveCommand = new DelegateCommand<object>(executeMethod: _ => Save(), canExecuteMethod: _ => _canSaveExecute);
12                     }
13                     return _saveCommand;
14                 }
15             }
16             private void Save()
17             {
18                 _canSaveExecute = false;
19                 _saveCommand.RaiseCanExecuteChanged();
20                 Console.WriteLine("Saving...");
21                 _canSaveExecute = true;
22                 _saveCommand.RaiseCanExecuteChanged();
23             }
24         } 

View Code

.也可以直接调用System.Windows.Input.CommandManager.InvalidateRequerySuggested()让你的CanExecute处理程序重新评估。

转载于:https://www.cnblogs.com/raohuagang/p/3618355.html

WPF CanExecuteChanged相关推荐

  1. 了解 WPF 中的路由事件和命令

    目录 路由事件概述 WPF 元素树 事件路由 路由事件和组合 附加事件 路由命令概述 操作中的路由命令 命令路由 定义命令 命令插入 路由命令的局限 避免命令出错 超越路由命令 路由处理程序示例 要想 ...

  2. CleanAOP实战系列--WPF中MVVM自动更新

    CleanAOP实战系列--WPF中MVVM自动更新 作者: 立地 邮箱: jarvin_g@126.com QQ: 511363759 CleanAOP介绍:https://github.com/J ...

  3. 【WPF】MVVM模式的3种command

    原文:[WPF]MVVM模式的3种command 1.DelegateCommand 2.RelayCommand 3.AttachbehaviorCommand 因为MVVM模式适合于WPF和SL, ...

  4. wpf mvvm 实例

    1.程序结构如图所示: 2.Model实现 在Model文件夹下新建业务类StudentModel,代码如下: public class StudentModel : INotifyPropertyC ...

  5. WPF快速入门系列(8)——MVVM快速入门

    一.引言 在前面介绍了WPF一些核心的内容,其中包括WPF布局.依赖属性.路由事件.绑定.命令.资源样式和模板.然而,在WPF还衍生出了一种很好的编程框架,即WVVM,在Web端开发有MVC,在WPF ...

  6. Windows Presentation Foundation (WPF)中的命令(Commands)简述

    Windows Presentation Foundation (WPF)中的命令(Commands)简述 原文:Windows Presentation Foundation (WPF)中的命令(C ...

  7. [译]WPF 应用程序和MVVM设计模式 ——Josh Smith

    这篇文章讨论: 模式与WPF MVP模式 为什么MVVM更加适用于WPF 用MVVM构建一个应用程序 译文地址:         http://www.cnblogs.com/lujiao_cs/ar ...

  8. prism项目搭建 wpf_Prism完成的一个WPF项目

    本着每天记录一点成长一点的原则,打算将目前完成的一个WPF项目相关的技术分享出来,供团队学习与总结. 总共分三个部分: 基础篇主要针对C#初学者,巩固C#常用知识点: 中级篇主要针对WPF布局与Mat ...

  9. WPF 自定义快捷键命令(COMMAND)(转)

    命令简介 WPF 中的命令是通过实现 ICommand 接口创建的.ICommand 公开两个方法(Execute 及 CanExecute)和一个事件(CanExecuteChanged).Exec ...

最新文章

  1. Velocity.js中文文档
  2. IE请求json数据时出现下载文件的现象。
  3. 今天的俩个一齐说的即时通讯
  4. sql 查询目标数据库中所有的表以其关键信息
  5. js的继承和原型链(更新中)
  6. 【leetcode 简单】第五题 最长公共前缀
  7. Python请求外部POST请求,常见四种请求体
  8. 如何获得SQL Server 2012 MCSA认证
  9. C语言全局变量和局部变量总结
  10. 【深度学习--图像分类】imageAI自定义模型训练
  11. kindle上网看其他网址_原来kindle不止可以看书,快来看看体验版浏览器怎么玩!...
  12. 计算机添加桌面小插件,一款实用的Windows小插件 ——桌面日历DesktopCal
  13. rainyday.js 下雨效果插件使用方法
  14. 天堂2启动mysql就没了_单机天堂2运行不了 求助
  15. CASIA -HWDB2.0-2.2和OLHWDB2.0-2.2数据集解析
  16. 芒果改进目录一览|原创改进YOLOv5、YOLOv7等YOLO模型全系列目录 | 人工智能专家唐宇迪老师联袂推荐
  17. 23种设计模式-单一原则
  18. 分享|百度ACE智能交通“双智”实践蓝皮书(附PDF)
  19. 小啊呜产品读书笔记001:《邱岳的产品手记-12》第22讲 产品经理的图文基本功(上):产品文档 23讲产品经理的图文基本功(下):产品图例
  20. Hexo+Gitee搭建个人博客 —— 零基础Gitee部署

热门文章

  1. $(document).ready() 和 window.onload 方法比较
  2. android listview使用自定义的adapter没有了OnItemClickListener事件解决办法
  3. 最短路径--Floyd算法
  4. [Silverlight入门系列]使用MVVM模式(7):ViewModel的INotifyPropertyChanged接口实现
  5. 非安装版的PostgreSQL8.3.3的首次使用经历
  6. shell 删除了hdfs 文件,在HDFS上删除超过10天的文件
  7. UDP sendto和recvfrom使用详解
  8. Matlab Compiler路径
  9. 少儿编程100讲轻松学python(二)-python cv2模块怎么安装
  10. 友声电子秤设置软件_友声电子秤说明书/操作指南?(一)