Если класс, к которому я хочу добавить свойство, это DependencyObject
, я обычно добавляю DependencyProperty
.Если классом является POCO (простые старые объекты clr), то я реализую INotifyPropertyChanged
.
. В общем, все мои бизнес-объекты - это POCO, и поэтому я использую INotifyPropertyChanged
.В мире WPF я в основном использую DependencyObjects (модели просмотра, пользовательские элементы управления, UserControls ...), и поэтому они являются DependencyProperties.Исключением являются модели представления, представляющие элементы (которые будут использоваться в качестве элементов в источнике элементов).В этом случае я думаю, что DependencyProperties не очень практичны (потому что Equals () и GetHashCode () из DependencyObjects запечатаны и DependencyObject
зависит от потока).
Если ваш класс уже является DependencyObject
, с использованием DependencyProperties может дать вам некоторые приятные преимущества : вам не нужно возвращать каждое значение, мощную систему наследования, значения по умолчанию,свойство изменяло обратные вызовы для свойства, приведение значения ... (мне нравится DependencyProperties, вероятно, больше, чем другим людям, которым они нравятся:)
Вывод: Основано на названии вашего вопроса: Какчтобы получить уведомление, когда что-то меняется в окне WPF? , я бы добавил DependencyProperty
, а не свойство clr, потому что Window является DependencyObject
.Кстати, в Visual Studio есть хороший фрагмент кода для создания DependencyProperties.