WPF Command CanExecute 觸發一次的問題

liuyong111發表於2018-05-29

昨天在專案中遇到一個問題,按鈕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();
            }
        }
    }

 

這樣就可以實時觸發了。

相關文章