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
类的setters
和FirstName
属性的LastName
属性内调用Person
方法。我已经使用add/remove
和Evaluate
对该应用程序进行了测试,并且都能正常工作。
其中哪些会更有效?
答案 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。