Vous ne pouvez accéder à un événement dans la classe de déclaration, comme .NET crée des variables d'instance privé derrière les scènes qui détiennent effectivement le délégué. En faisant cela..
public event EventHandler MyPropertyChanged;
est en train de faire;
private EventHandler myPropertyChangedDelegate;
public event EventHandler MyPropertyChanged
{
add { myPropertyChangedDelegate += value; }
remove { myPropertyChangedDelegate -= value; }
}
et cela...
MyPropertyChanged(this, EventArgs.Empty);
est en fait un...
myPropertyChangedDelegate(this, EventArgs.Empty);
Ainsi, vous pouvez (évidemment), seul l'accès privé instance de délégué de la variable dans la classe de déclaration.
La convention est d'offrir quelque chose de ce genre dans la classe de déclaration..
protected virtual void OnMyPropertyChanged(EventArgs e)
{
EventHandler invoker = MyPropertyChanged;
if(invoker != null) invoker(this, e);
}
Vous pouvez ensuite appeler OnMyPropertyChanged(EventArgs.Empty)
à partir de n'importe où dans la classe ou au-dessous de la hiérarchie d'héritage d'invoquer l'événement.