实现CanExecuteChanged的首选方法是什么?

时间:2019-10-12 16:06:41

标签: wpf icommand

Here's我正在使用的代码,我所做的唯一更改是在[CallerMemberName]方法中添加了void Changed([CallerMemberName] string name = "")属性,就像这样。昨天在一篇文章中,我读到了而不是

    public event EventHandler CanExecuteChanged 
    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }

我可以替换这部分:

    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }

使用;并在CanExecuteChanged类中添加一个函数来处理Command,如下所示:

    public void Evaluate() => CanExecuteChanged?.Invoke(null, EventArgs.Empty);

并在Evaluate类的settersFirstName属性的LastName属性内调用Person方法。我已经使用add/removeEvaluate对该应用程序进行了测试,并且都能正常工作。

其中哪些会更有效?

1 个答案:

答案 0 :(得分:1)

在这段代码中

    {
        add { CommandManager.RequerySuggested += value; }
        remove { CommandManager.RequerySuggested -= value; }
    }
{p> RequirySuggested事件是CommandManager.InvalidateRequerySuggested method正常工作所必需的。此方法用于使命令绑定无效并更新所有命令的CanExecute。您为CanExecuteChanged?.Invoke(null, EventArgs.Empty);类使用Person手动完成了几乎相同的操作。但是在某些情况下,仍然需要CommandManager.InvalidateRequerySuggested,例如,当您需要在Person类之外或从其他ViewModel更新命令绑定时。

对于您的问题,也有现成的SO thread