2014-04-07 67 views
0

我需要調試給定依賴項屬性的綁定設置。 在開始的時候,我設置綁定到依賴屬性對於給定的源實例,用下面的代碼:當依賴項屬性的綁定發生變化時通知

var binding = new Binding(path); 
      binding.Source = source; 
      binding.Mode = twoWay ? BindingMode.TwoWay : BindingMode.OneWay; 
      binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged; 
      binding.Converter = valueConverter; 
      var bindingResult = BindingOperations.SetBinding(this, ModelValueProperty, binding); 

      var bindingExpression = BindingOperations.GetBindingExpression(this, ModelValueProperty); 

bindingExpression不是null結合的狀態爲活動。 經過一些視圖操作後,當我嘗試獲取bindingExpression時,它將爲null。 如何捕獲綁定替換或更改給定的依賴項屬性?

編輯: 以另一種方式,我想知道如何得到通知時bindingExpression改變從主動的地位,獨立

回答

0

您需要設置該屬性:

binding.NotifyOnSourceUpdated = true 

而且註冊到SourceUpdated事件的控制你綁定(在你的情況下,它的this):

 this.SourceUpdated += (s, args) => 
            { 
             // Catch changes there 
            }; 

或者,你可以捕捉直接與DependencyPropertyDescriptor就這一DependencyProperty的變化:

  var descriptor = DependencyPropertyDescriptor.FromProperty(ModelValueProperty, typeof(YourType)); 
      descriptor.AddValueChanged(this, OnValueChanged); 


      private void OnValueChanged(object sender, EventArgs e) 
      { 
       //... 
      } 
+0

感謝,爲第1解決方案,我不是在FrameworkElement的,但在一個簡單的DependencyObject。對於第二種解決方案,我得到一個空描述符 – enenkey

+0

問題是:如果您正在編寫控件,爲什麼要從DependencyObject而不是FrameworkElement派生? 也爲描述符,你有正確的設置類型? – Damascus

+0

實際上,ModelValueProperty是「裝飾器」的一部分,這是一種從DependencyObject派生的視圖模型,這個裝飾器用來爲我的商業價值添加一些邏輯。 – enenkey

相關問題