MaxSter
@MaxSter
Software engineer

Как переопределить подписку на PropertyChanged?

Есть класс, который реализует INotifyPropertyChanged, следовательно, в классе есть событие
public event PropertyChangedEventHandler PropertyChanged

На это событие происходит подписка в более чем 300 местах простым оператором +=. Есть цель перейти на использование WeakEventManager для избежания утечек памяти. Конечно, совсем не хочется изменять способ подписки аж в 300 местах, поэтом хочется как-то выкрутиться.
Все что я смог придумать (но это не работает):
public event PropertyChangedEventHandler PropertyChanged
        {
            add
            {
                WeakEventManager<BaseNotifyPropertyChanged, EventArgs>.AddHandler(this, "PropertyChanged", (EventHandler<EventArgs>)value);
//либо же
                PropertyChangedEventManager.AddHandler(this, value, "IsDirty");
            }
            remove
            {
               //аналогичный код
            }
        }

И в случае с WeakEventManager, и с PropertyChangedEventManager компилятор ругается на невозможность приведения PropertyChangedEventHandler к EventHandler. Можно ли как-то решить проблему?
  • Вопрос задан
  • 614 просмотров
Пригласить эксперта
Ответы на вопрос 1
keyros
@keyros
http://about.me/keyros
попробуйте сделать вот так
я не сильно разбирался с тем что нужно сделать, но я поверил вам и вот.
public event PropertyChangedEventHandler PropertyChanged
        {
            add
            {
                WeakEventManager<INotifyPropertyChanged, PropertyChangedEventArgs>.AddHandler(this, "PropertyChanged", new EventHandler<PropertyChangedEventArgs>(value));
                //либо же
                PropertyChangedEventManager.AddHandler(this, new EventHandler<PropertyChangedEventArgs>(value), "IsDirty");
            }
            remove
            {
                WeakEventManager<INotifyPropertyChanged, PropertyChangedEventArgs>.RemoveHandler(this, "PropertyChanged", new EventHandler<PropertyChangedEventArgs>(value));

               
                //аналогичный код
                PropertyChangedEventManager.RemoveHandler(this, new EventHandler<PropertyChangedEventArgs>(value), "IsDirty");
            }
        }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы