Вы должны использовать DependencyProperty
только тогда, когда хотите иметь возможность привязать его значение к чему-либо через XAML, например
<local:MyObject MyDependencyProperty="{Binding ...}" />
Обновление: как упомянуто Яном ниже, свойства зависимостей также необходимы, если вы хотите иметь возможность анимировать свое свойство или установить его с помощью стиля
Если вам не нужно работать таким образом, то в этом нет необходимости. например Если вы просто хотите установить значение константы через 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
}
Затем создайте свойство Color
в вашей ViewModel, которое вызывает событие PropertyChanged
и связывает его через View:
<TextBlock Text="{Binding Color.Hue}" />
Как я уже сказал, я бы не сказал, что это особенное улучшение по сравнению с тем, что у вас уже есть.
person
Steve Greatrex
schedule
05.11.2010