2008-10-27 4 views
2

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

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

ответ

2

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

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

1

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

Article link

5

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

/// 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

+0

ты человек! Я боролся с этим в течение нескольких часов, прежде чем нашел ваш ответ. – 2010-08-28 23:56:17

 Смежные вопросы

  • Нет связанных вопросов^_^