我有一个课程,每当有一个属性发生变化时,就会发生一个事件。
public event EventHandler StructureChanged;
protected virtual void NotifyStructureChanged(EventArgs e)
{
if (StructureChanged != null)
{
StructureChanged(this, e);
}
}
我在我的属性中的set语句中包含NotifyStructureChanged(new EventArgs());
。
无论何时调用该方法,StructureChanged
始终为空。我的类是自定义用户控件中的私有成员,类事件在usercontrol的构造函数中注册,如此
_pt.StructureChanged += _pt_StructureChanged;
并在此处理
void _pt_StructureChanged(object sender, EventArgs e)
{
UpdateControl();
}
到目前为止,我所拥有的是一个自定义类,其中的事件是自定义用户控件的私有成员。我在自定义usercontrol中注册了我的类事件。每当类属性发生更改时,我都会更新我的控件以反映类中的更改。
我在这里做错了什么?我的usercontrol上有一个按钮,我可以注册该事件,为什么我不能注册我的课程事件?
答案 0 :(得分:0)
如果StructureChanged
是null
而不是在事件被触发后附加事件处理程序(或者您正在某处拆分处理程序)。
也不要传递EventArgs
- 它只是无用的虚拟参数。
public event EventHandler StructureChanged;
protected virtual void OnStructureChanged()
{
if (StructureChanged != null)
StructureChanged(this, EventArgs.Empty);
}
在setter中调用此方法:
public Foo Bar
{
get { return _bar; }
set {
if (_bar == value)
return;
_bar = value;
OnStructureChanged();
}
}