在从 Josh Smith 文章中复制 RelayCommand 的代码时,我复制了以下代码
public event EventHandler CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
然后在阅读 this answer on SO 之后,我还在我的类(class)中复制了来自 Prism 的 DelegateCommand 类的代码。protected void NotifyCanExecuteChanged()
{
if (CanExecuteChanged != null)
{
CanExecuteChanged(this, EventArgs.Empty);
}
}
但是他在 NotifyCanExecuteChanged 方法中给了我一个错误如果我从事件中删除添加和删除重载,则不会出现此错误。有人可以帮我理解这背后的原因吗?
最佳答案
使用类似字段的事件(这是没有 add
/remove
的简单表单的名称,那么当您执行 if(CanExecuteChanged != null)
或 CanExecuteChanged(this, ...)
时, CanExecuteChanged
指的是 支持字段 ,它是 EventHandler
类型的委托(delegate)字段。您可以调用委托(delegate)字段。但是,在您的示例中情况并非如此,因为没有明显的要调用的东西。当然没有本地字段,并且转发的事件(CommandManaged.RequerySuggested
)本质上不会公开任何“调用”功能.
基本上,要使其工作,您需要访问调用机制。最常见的是,我希望采用以下形式:
CommandManager.OnRequerySuggested();
但是如果有一个方法可以调用这个事件(并且不需要),它可以被称为任何东西。
(
On*
是“引发此事件”API 的常见模式,如果它是多态的,则加倍)关于c# - 如果我在 C# 中重载了添加和删除,为什么不能引发或调用事件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12912941/