Ответ 1
Вы должны использовать только DependencyProperty
, когда хотите привязать свое значение к чему-либо через XAML, например
<local:MyObject MyDependencyProperty="{Binding ...}" />
Обновление: как упоминалось ниже в разделе Ian, свойства зависимостей также требуются, если вы хотите иметь возможность анимировать ваше свойство или установить его в стиле
Если вам не нужно работать таким образом, это не нужно. например Если вы просто хотите установить значение константу через XAML (как показано ниже), это будет работать без использования DependencyProperty
<local:MyObject MyRegularProperty="Some Value" />
Аналогично, если вы хотите привязать значение свойства к (например) вашей модели представления:
<TextBlock Text="{Binding MyViewModelProperty}" />
тогда вам не нужно использовать DependencyProperty
. Если вы реализуете INotifyPropertyChanged
, тогда Text
будет по-прежнему обновляться при изменении свойства.
Изменить: при повторном чтении вашего вопроса, я не уверен, повлияет ли ваша ситуация на то, используете ли вы DependencyProperty
или нет, если я читаю его правильно, все, что вы хотите сделать, - это изменение количества свойств в пользовательском интерфейсе, когда изменяется какое-либо из этих свойств?
Я не думаю, что есть что-то неправильное в том, как вы реализуете вещи на данный момент (т.е. поднимаете много событий PropertyChanged
в каждом сеттере), но если вы не заинтересованы в этом, вы можете попробовать добавляется одно свойство, которое предоставляет соответствующие дочерние свойства для привязки к ним:
class ColorWrapper
{
public Color Color { get; set; }
public byte Hue
{
get { return this.Color.Hue; } //or however this is calculated
}
Затем на вашем ViewModel есть свойство Color
, которое вызывает событие PropertyChanged
и привязывается к нему через View:
<TextBlock Text="{Binding Color.Hue}" />
Как я уже сказал, я бы не сказал, что это особенно улучшает то, что у вас уже есть.