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

时间:2015-01-30 01:22:55   收藏:0   阅读:93

 

 

 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
    }

  

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!