Я думаю, что INotifyPropertyChanged
обычно является правильным механизмом для push-уведомлений об обновлениях значений свойств.
Альтернатива:
Однако это неЕдинственно возможный механизм для достижения этой цели.Например, Windows Forms также поддерживает отдельные …Changed
события для свойства;т. е. если у вас есть свойство с именем Foo
, вы можете иметь ассоциированное событие FooChanged
, которое будет запускаться в установщике Foo
.
Наличие отдельных событий …Changed
имеет преимущество, заключающееся в специфичностик одному конкретному свойству и, следовательно, не требует от наблюдателей / подписчиков отфильтровывать уведомления о свойствах, которые им не интересны. С другой стороны, ваши объекты (данные) могут начать чувствовать себя «громоздкими», как только вы объявитедополнительные события …Changed
.
Некоторые замечания о реализации INotifyPropertyChanged
:
Если вы устали переписывать тот же самый шаблонный кодснова и снова ...:
public T SomeProperty
{
get { … }
set
{
if (someProperty != value)
{
someProperty = value;
NotifyPropertyChanged("SomeProperty");
}
}
}
private T someProperty;
тогда вы, возможно, захотите рассмотреть инфраструктуру AOP (например, PostSharp).Я помню, что на CodePlex или в Google Code существует библиотека, которая автоматически реализует INotifyPropertyChanged
для вас (или переписывает байт-код CIL);к сожалению, я не могу вспомнить название библиотеки.
Есть и другие связанные интерфейсы INotifyPropertyChanging
, INotifyListChanged
и т. д. Возможно, вы захотите посмотреть и на них.1036 *