Существует ли механизм уведомления, когда свойство зависимости изменилось? - PullRequest
2 голосов
/ 27 октября 2008

В приложении Silverlight я пытаюсь выяснить, когда изменилось свойство в пользовательском контроле. Меня интересует один конкретный DependencyProperty, но, к сожалению, сам элемент управления не реализует INotifyPropertyChanged.

Есть ли другой способ определить, изменилось ли значение?

Ответы [ 4 ]

5 голосов
/ 02 декабря 2009

Можно. По крайней мере, я сделал. Еще нужно посмотреть плюсы и минусы.

 /// Listen for change of the dependency property
    public void RegisterForNotification(string propertyName, FrameworkElement element, PropertyChangedCallback callback)
    {

        //Bind to a depedency property
        Binding b = new Binding(propertyName) { Source = element };
        var prop = System.Windows.DependencyProperty.RegisterAttached(
            "ListenAttached"+propertyName,
            typeof(object),
            typeof(UserControl),
            new System.Windows.PropertyMetadata(callback));

        element.SetBinding(prop, b);
    }

И теперь вы можете вызвать RegisterForNotification, чтобы зарегистрироваться для уведомления об изменении свойства элемента, например.

RegisterForNotification("Text", this.txtMain,(d,e)=>MessageBox.Show("Text changed"));
            RegisterForNotification("Value", this.sliderMain, (d, e) => MessageBox.Show("Value changed"));

Смотрите мой пост здесь на том же http://amazedsaint.blogspot.com/2009/12/silverlight-listening-to-dependency.html

2 голосов
/ 27 октября 2008

В WPF у вас есть DependencyPropertyDescriptor.AddValueChanged , но, к сожалению, в Silverlight такого нет. Так что ответ - нет.

Возможно, если вы объясните, что вы пытаетесь сделать, вы можете обойти ситуацию или использовать привязки.

1 голос
/ 03 ноября 2008

Как писал Джон Галлоуэй в другой теме, вы можете использовать что-то вроде WeakReference, чтобы обернуть интересующие вас свойства и перерегистрировать их в своем собственном классе. Это код WPF, но концепция не опирается на DependencyPropertyDescriptor.

Ссылка на статью

0 голосов
/ 19 марта 2009

Проверьте следующую ссылку. Он показывает, как обойти проблему в Silverlight, где у вас нет DependencyPropertyDescriptor.AddValueChanged

http://themechanicalbride.blogspot.com/2008/10/building-observable-model-in.html

...