Вы можете получить доступ только к событию в объявляющем классе, поскольку .NET создает частные переменные экземпляра за кулисами, которые фактически удерживают делегата. Выполнение этого.
public event EventHandler MyPropertyChanged;
на самом деле делает это:
private EventHandler myPropertyChangedDelegate;
public event EventHandler MyPropertyChanged
{
add { myPropertyChangedDelegate += value; }
remove { myPropertyChangedDelegate -= value; }
}
и делает это ...
MyPropertyChanged(this, EventArgs.Empty);
на самом деле это .. .
myPropertyChangedDelegate(this, EventArgs.Empty);
Таким образом, вы можете (очевидно) получить доступ только к переменной экземпляра частного делегата из класса объявления.
Соглашение должно предоставить что-то подобное в объявляющем классе. .
protected virtual void OnMyPropertyChanged(EventArgs e)
{
EventHandler invoker = MyPropertyChanged;
if(invoker != null) invoker(this, e);
}
Вы можете вызвать OnMyPropertyChanged(EventArgs.Empty)
из любого места этого класса или ниже иерархии наследования для вызова события.