WPF Command CanExecute 触发一次的问题

昨天在项目中遇到一个问题,按钮bind了Command后,利用CanExecute控制它的是否可点击。结果却在初始化viewmodel的时候执行了一次CanExecute,之后一直不触发,按钮的可用性状态也一直不改变。
 
 

 public DelegateCommand NewCommand { get; set; }
  public DelegateCommand CheckCommand { get; set; }

 


 

 
看了半天,也没看出啥原因,以为是控件的问题,后来又换成普通的Button,结果还是一样,只触发一次。

后来查资料,才知道需要用CommandManager注册下。
修改后代码如下

public class DelegateCommand : ICommand
    {
        Action _action;
        Func<bool>  _canAction;
        public DelegateCommand(Action action)
        {
            _action = action;
        }
        public DelegateCommand(Action action, Func<bool> canAction)
        {
            _action = action;
            _canAction = canAction;
        }
        public bool CanExecute(object parameter)
        {
            if (_canAction == null)
            {
                return true;
            }            
            return _canAction.Invoke();
        }
        //public event EventHandler CanExecuteChanged;
        public event EventHandler CanExecuteChanged
        {
            add { CommandManager.RequerySuggested += value; }
            remove { CommandManager.RequerySuggested -= value; }
        }
        public void Execute(object parameter)
        {
            if (_action != null)
            {
                _action.Invoke();
            }
        }
    }

 


这样就可以实时触发了。

posted @ 2018-05-29 16:03  liuyong111  阅读(826)  评论(1编辑  收藏  举报