Использование DependencyProperty.Register ()? - PullRequest
1 голос
/ 02 августа 2010

У меня есть 2 элемента управления A и B, которым необходимо совместно использовать свойство зависимостей.

A имеет свойство, определенное как:

public static readonly DependencyProperty PathProperty = DependencyProperty.Register ("PathProperty", typeof (строка), typeof (A), новые PropertyMetadata (string.Empty, OnPathChanged));

    public string Path
    {
        get { return (string)GetValue(PathProperty); }
        private set { SetValue(PathProperty, value); }
    }

    private static void OnPathChanged(DependencyObject dobj, DependencyPropertyChangedEventArgs args)
    {
       //Dos something
    }

Внутри класса B у меня есть

открытая статическая только для чтения DependencyProperty Path =A.PathProperty.AddOwner (typeof (B));

    public string Path
    {
        get { return (string)GetValue(Path); }
        set { SetValue(Path, value); }
    }     

Теперь, если я явно установлю свойство Path Dependency для B ... (из кода, подобного Binstance.Path = "value"), я быожидать, что метод OnPathChanged будет запускаться внутри элемента управления A?

Разве это не ожидаемое поведение или я что-то упустил?Как мне заставить это работать?... т.е. изменение свойства пути на B должно запускать OnPAthChanged на A

Спасибо!

1 Ответ

0 голосов
/ 02 августа 2010

Я думаю, вы неправильно поняли концепцию DependencyProperties ... Два отдельных элемента управления не получают обновления событий друг друга, равно как и два объекта, полученных из Dependency, не получают уведомления об изменениях других объектов (например, если у вас два текстовых поля - изменяя свой TextProperty, ничего не делает другому). Если вы действительно хотите, чтобы ваш второй тип Control запускал статический обратный вызов проверки - вам нужно сделать его общедоступным и вызвать его при регистрации DependencyProperty в классе B. Хотя я бы не рекомендовал его - он дает вам очень тесную связь между два класса, которые в остальном не имеют ничего общего (как я понимаю ваш пример).

...