На самом деле, в Silverlight вы не можете наследовать объекты DependencyObjects, и поэтому вы должны (и должны) реализовать INotifyPropertyChanged.
Реализация INotifyPropertyChanged имеет много преимуществ по сравнению с объектами DependencyObject (я буду сокращать это DO, чтобы упростить его) и использование DependencyProperties (DP):
- Это более легкий
- Позволяет вам больше свободы в моделировании ваших объектов
- Может быть легко сериализовано
- Вы можете вызывать событие, когда хотите, что может быть полезно в определенных сценариях, например, когда вы хотите объединить несколько изменений только в одной операции пользовательского интерфейса, или когда вам нужно вызвать событие, даже если данные не были изменить (заставить перерисовать ...)
С другой стороны, наследование DO в WPF имеет следующие преимущества:
- Легче реализовать, особенно для начинающих.
- Вы получаете механизм обратного вызова (почти) бесплатно, позволяющий получать уведомления при изменении значения свойства
- Вы получаете механизм принуждения, с помощью которого можно определять правила для max, min и текущей стоимости свойства.
Есть и другие соображения, но это основные.
Я думаю, что общий консенсус заключается в том, что DP отлично подходят для элементов управления (и вы можете реализовать CustomControl с настраиваемыми DP даже в Silverlight), но для объектов данных лучше использовать INotifyPropertyChanged.
НТН,
Laurent