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();
            }
        }
    }

 


这样就可以实时触发了。

转载于:https://www.cnblogs.com/czly/p/9105521.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值