Привязки вызовов для DependencyObject при изменении DependencyProperites - PullRequest
0 голосов
/ 09 апреля 2010

Есть ли способ уведомить привязки объекта DependencyObject, когда внутренние свойства DependencyProperties изменились?

Например, у меня есть этот класс:

public class BackgroundDef : DependencyObject
    {
        public static readonly DependencyProperty Color1Property =
            DependencyProperty.Register("Color1", typeof(Color),
                typeof(BackgroundDef), new UIPropertyMetadata(Colors.White));

        public static readonly DependencyProperty UseBothColorsProperty =
            DependencyProperty.Register("UseBothColors", typeof(bool),
                typeof(BackgroundDef), new UIPropertyMetadata(false));

        public static readonly DependencyProperty Color2Property =
            DependencyProperty.Register("Color2", typeof(Color),
                typeof(BackgroundDef), new UIPropertyMetadata(Colors.White));

        public Color Color1
        {
            set { SetValue(Color1Property, value); }
            get { return (Color)GetValue(Color1Property); }
        }

        public bool UseBothColors
        {
            set { SetValue(UseBothColorsProperty, value); }
            get { return (bool)GetValue(UseBothColorsProperty); }
        }

        public Color Color2
        {
            set { SetValue(Color2Property, value); }
            get { return (Color)GetValue(Color2Property); }
        }
    }

Для которого у меня есть 3 отдельных двусторонних привязки, которые устанавливают значения для Color1, Color2 и UseBothColors. Но у меня также есть привязка для экземпляра BackgroundDef, который должен создать кисть и нарисовать фон кнопки (либо одного цвета, либо двух цветов градиента). Моя проблема заключается в том, что двусторонние привязки для DependencyProperties обновляют свойства, но привязка для экземпляра класса не вызывается, так как, по-видимому, весь объект не изменяется. Любая идея, как я мог бы вызвать привязки для объекта DependencyObject, когда свойства DependencyProperties изменены?

1 Ответ

1 голос
/ 09 апреля 2010

Вы могли бы:

Используйте мультисвязывание и привязку ко всем трем значениям вместо привязки к классу. тогда всякий раз, когда одно из значений изменяется, привязка будет переоценена. (это техника, которую я бы использовал)

Или:

Если ваш класс BackgroundDef является свойством другого класса, вы можете вызвать событие NotifyPropertyChanged для этого класса всякий раз, когда изменяется любое из свойств BackgroundDef. Конечно, это будет означать наличие свойства в BackgroundDef, которое является классом его родителей, и уведомление родителя о каждом изменении ребенка.

...