实施 CanExecuteChanged 的首选方式是什么?
What's the preferred way of implementing CanExecuteChanged?
我正在使用的代码,我所做的唯一更改是在 void Changed([CallerMemberName] string name = "")
方法中添加了 [CallerMemberName]
属性。在昨天的一篇文章中,我读到了那篇文章而不是
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
我可以替换这部分:
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
与 ;
并添加一个函数来处理 CanExecuteChanged
in Command
class 像这样:
public void Evaluate() => CanExecuteChanged?.Invoke(null, EventArgs.Empty);
并在 FirstName
的 setters
和 Person
class 的 LastName
属性中调用 Evaluate
方法。我已经用 add/remove
和 Evaluate
测试了该应用程序,两者都有效。
这些哪个更有效率?
在这段代码中
public event EventHandler CanExecuteChanged
{
add => CommandManager.RequerySuggested += value;
remove => CommandManager.RequerySuggested -= value;
}
RequirySuggested
事件是 CommandManager.InvalidateRequerySuggested
method.
正常工作所必需的
此方法用于使命令绑定无效并更新所有命令CanExecute
。您使用 CanExecuteChanged?.Invoke(null, EventArgs.Empty);
为您的 Person
class 手动完成了几乎相同的操作。但在某些情况下,仍然需要 CommandManager.InvalidateRequerySuggested
,例如,当您需要在 Person
class 之外或从其他 ViewModel 更新命令绑定时。
还有一个 SO thread 对你的问题有不同的看法。
void Changed([CallerMemberName] string name = "")
方法中添加了 [CallerMemberName]
属性。在昨天的一篇文章中,我读到了那篇文章而不是
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
我可以替换这部分:
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
与 ;
并添加一个函数来处理 CanExecuteChanged
in Command
class 像这样:
public void Evaluate() => CanExecuteChanged?.Invoke(null, EventArgs.Empty);
并在 FirstName
的 setters
和 Person
class 的 LastName
属性中调用 Evaluate
方法。我已经用 add/remove
和 Evaluate
测试了该应用程序,两者都有效。
这些哪个更有效率?
在这段代码中
public event EventHandler CanExecuteChanged
{
add => CommandManager.RequerySuggested += value;
remove => CommandManager.RequerySuggested -= value;
}
RequirySuggested
事件是 CommandManager.InvalidateRequerySuggested
method.
此方法用于使命令绑定无效并更新所有命令CanExecute
。您使用 CanExecuteChanged?.Invoke(null, EventArgs.Empty);
为您的 Person
class 手动完成了几乎相同的操作。但在某些情况下,仍然需要 CommandManager.InvalidateRequerySuggested
,例如,当您需要在 Person
class 之外或从其他 ViewModel 更新命令绑定时。
还有一个 SO thread 对你的问题有不同的看法。