ICommand.CanExecuteChanged事件订阅对象的变化

 public class DelegateCommand : ICommand
    {
        Func<object, bool> canExecute;
        Action<object> executeAction;
        bool canExecuteCache;
        #region 构造函数
        public DelegateCommand()
            : this(null, null)
        {
        }

        public DelegateCommand(Action<object> executeAction, Func<object, bool> canExecute)
        {
            this.executeAction = executeAction;
            this.canExecute = canExecute;

        }
        #endregion

        #region get-set

        public Func<object, bool> CanExecuteEx
        {
            get { return canExecute; }
            set { canExecute = value; }
        }

        public Action<object> ExecuteActionEx
        {
            get { return executeAction; }
            set { executeAction = value; }
        }

        #endregion

        #region ICommand Members

        public bool CanExecute(object parameter)
        {
            if (canExecute == null) return true;
            bool temp = canExecute(parameter);

            if (canExecuteCache != temp)
            {
                canExecuteCache = temp;
            }

            return canExecuteCache;
        }

        //public event EventHandler CanExecuteChanged;

        public void Execute(object parameter)
        {
            if (executeAction == null) return;
            executeAction(parameter);
        }
        public event EventHandler CanExecuteChanged
        {
            add { CommandManager.RequerySuggested += value; }
            remove { CommandManager.RequerySuggested -= value; }
        }
        #endregion
    }

  

时间: 2024-11-05 13:23:09

ICommand.CanExecuteChanged事件订阅对象的变化的相关文章

Guava库学习:学习Guava EventBus(二)EventBus 事件订阅示例

原文地址:Guava库学习:学习Guava EventBus(二)EventBus 事件订阅示例 上一篇Guava库学习:学习Guava EventBus(一)EventBus,我们简单的对Guava基于事件的编程进行了介绍,学习和了解了EventBus类的使用,本篇起,我们通过一系列的示例代码深入的学习EventBus类,本篇学习Guava EventBus(二)EventBus 事件订阅示例.     订阅Subscribe 首先,我们假定定义了如下所示的TradeAccountEvent类

架构设计:系统存储(16)——Redis事件订阅和持久化存储

接上文<架构设计:系统存储(15)--Redis基本概念和安装使用> 3-4.事件功能和配置项 Redis从2.X版本开始,就支持一种基于非持久化消息的.使用发布/订阅模式实现的事件通知机制.所谓基于非连接保持,是因为一旦消息订阅者由于各种异常情况而被迫断开连接,在其重新连接后,其离线期间的事件是无法被重新通知的(一些Redis资料中也称为即发即弃).而其使用的发布/订阅模式,意味着其机制并不是由订阅者周期性的从Redis服务拉取事件通知,而是由Redis服务主动推送事件通知到符合条件的若干订

Eventbus的使用与深入-- 一个好用的开源的事件订阅与发布总线,解放你的handler

Eventbus已经发布了很长时间,经历了市场和技术的的考验,与otto齐名,下面来简单了解一下eventbus的使用方法与深入探究. 简单介绍 EventBus是一个用于简化Andorid.Fragment.Threads.Service之间信息传递的一个发布/订阅事件集. 传统的Android组件之间的通信方式有:Activity之间使用Intent:Service向Activity发送broadcast:Fragment和Activity之间相互持有对方的引用(随后可以调用对方的相关方法进

js中的DOM事件与对象

概念图 document.getElementById("bb"); 根据id找到bb,只能找一个哦 var aa = document.getElementById("bb"); 设一个变量aa,getElemenById,根据id找到bb,并赋值给aa: var div2 = document.getElementsByClassName("bb")[0]; 根据classname寻找到bb,并赋值给变量div2:找到的是一个数组哦: var

016 事件内核对象4

示例 #define UNICODE #include <stdio.h> #include <tchar.h> #include <windows.h> #include <process.h> #define ___tmainCRTStartup int *gPNum; BOOL gUsing = FALSE; void Entry() { while(InterlockedExchange((long*)&gUsing,TRUE) == TRU

线程同步——内核对象实现线程同步——事件内核对象

1 事件内核对象 2 3 事件类型对象有两种不同类型,手动重置和自动重置 4 手动重置:当一个手动重置对象被触发时候,等待该对象的所有线程变为可调度. 5 自动重置:当一个自动重置对象被触发时,只有一个等待该事件的线程会变为可调度 6 7 下面是一个创建事件内核对象的函数: 8 HANDLE CreateEvent( 9 LPSECURITY_ATTRIBUTES lpEventAttributes, 10 BOOL bManualReset, 11 BOOL bInitialState, 12

事件订阅分发模型

最近看了下各位大师写的事件订阅分发的模型很有感触,js果然强大到行如流水,下面这段模型摘自汤姆大叔的深入理解Javascript,非常感谢原作者 原文链接:http://www.sxrczx.com/docs/js/2305513.html function Event(name) { var handlers = []; this.getName = function () { return name; }; this.addHandler = function (handler) { han

事件Event对象

事件event对象 当事件发生时,会向调用函数传递一个event对象,event对象记录当前事件发生时的环境信息. 一个事件只能对应一个event对象,并且event对象是短暂存在的. DOM中的event对象的使用方法 1.在HTML标记中,通过事件来调用函数,向函数传递一个event参数,该参数就是一个event对象,这个event必须全小写.注意:这个event参数是固定的 <img id="img01" src="images/01.jpg" oncl

JavaScript事件的对象

 事件的对象 JavaScript事件的一个重要方面是它们拥有一些相对一致的特点,可以给我们的开发提供更多的强大功能.最方便和强大的就是事件对象了,它们可以帮你处理鼠标和键盘方面的很多事情,此外我们还可以修改一般事件的捕获或者冒泡流的函数. 1.事件对象 事件处理函数的一个标准特性是以某些方式访问的事件对象包含有关于当前事件的上下文信息. 事件处理三部分组成:对象.事件处理函数=函数.例如:单击文档任意处. 除了用匿名函数的方法作为被执行的函数,也可以设置成独立的函数. <span styl