美文网首页
WPF Command CanExecute 触发一次的问题

WPF Command CanExecute 触发一次的问题

作者: czly | 来源:发表于2017-07-13 14:24 被阅读0次

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


    image.png

    <pre>
    public DelegateCommand NewCommand { get; set; }
    public DelegateCommand CheckCommand { get; set; }
    </pre>


    image.png image.png

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

    后来查资料,才知道需要用CommandManager注册下。
    修改后代码如下
    <pre>
    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();
    }
    }
    }
    </pre>
    这样就可以实时触发了。

    相关文章

      网友评论

          本文标题:WPF Command CanExecute 触发一次的问题

          本文链接:https://www.haomeiwen.com/subject/wbmwhxtx.html