zoukankan      html  css  js  c++  java
  • 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();
                }
            }
        }


    这样就可以实时触发了。

  • 相关阅读:
    使用vue.js 引用阿里图标 --无法显示(报错)
    thinkphp5.0如何隐藏index.php入口文件
    thinkphp5.0--编写api,返回json格式
    小程序滑动问题(如何让底层不会跟着滑动)
    thinkphp5.0验证的封装
    git--提交代码
    小程序图片上传
    SVG分组和引用
    总结React写参数的几种方式
    React中使用echarts
  • 原文地址:https://www.cnblogs.com/czly/p/9105521.html
Copyright © 2011-2022 走看看