Наследование от одного базового класса, который реализует INotifyPropertyChanged - PullRequest
7 голосов
/ 22 сентября 2010

Я использовал следующий кусочек кода в форме печенья для нескольких десятков классов

public event PropertyChangedEventHandler PropertyChanged;

protected void NotifyPropertyChanged(string propertyName)
{
   if (PropertyChanged != null)
   {
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
   }
}

Все эти классы реализуют INotifyPropertyChanged.Чтобы заставить замолчать мои СУХИЕ сигналы тревоги, в последнее время я проводил рефакторинг этих классов для наследования моего базового класса PropertyNotifier, единственная цель которого - предоставить NotifyPropertyChanged для классов, которые наследуют его - которые являются десятками ViewModel классов в моемОгромный проект.

Он чувствует себя ленивым и немного грязным.Я ухудшаю производительность или нарушаю хорошие методы проектирования?Я полагаю, что если бы уведомление об изменениях должно было быть таким простым, в среде WPF уже был бы базовый класс, который делает то, что делает мой PropertyNotifier класс.

Обратите внимание, что по многим причинам яу меня были проблемы с производительностью моего отзывчивости пользовательского интерфейса - в основном из-за большого количества элементов управления.Поэтому я стараюсь обрезать жир везде, где могу.Есть идеи?

Ответы [ 3 ]

5 голосов
/ 22 сентября 2010

Это очень распространенный базовый класс для разработки в WPF или Silverlight, который не оказывает заметного влияния на производительность. Единственная проблема, с которой я сталкиваюсь с PropertyNotifier в качестве базового класса, связана с ограничением одиночного наследования, но, как правило, это редкая проблема с типом класса, для которого он вам нужен.

3 голосов
/ 23 сентября 2010

Да, это очень распространенная практика. Для крупномасштабного приложения становится необходимым иметь такой базовый класс. Мы также создали BaseViewModel для той же цели; мы также реализовали много общего кода (через ViewModels) в этом базовом классе, такого как ведение журнала, отображение сообщений об ошибках, инициализация прокси-объектов WCF и т. д.

2 голосов
/ 28 сентября 2010

Другой реализацией является Модель класса WPF Application Framework (WAF) . Это точно так же.

...