2008-11-12 67 views
1

請問有人請向我解釋這裏發生了什麼?
我正在代碼中創建綁定。Silverlight - 數據綁定不聽PropertyChanged事件

的目標對象是用戶控件
目標屬性是布爾的DependencyProperty
源對象是一個FrameworkElement的和實現INotifyPropertyChanged
源屬性的類型的ObservableCollection的

會發生什麼:

  • 綁定是在代碼中創建的,結果BindingExpressionBase看起來不錯,模式是OneWay,目標值被設置爲correc tly(此時)

    綁定b = new Binding();
    b.Path =「SourceProperty」;
    b.Source = SourceObject;
    BindingExpressionBase e = this.SetBinding(TargetProperty,b);

  • 然後源屬性因另一個數據綁定而發生更改。 UserControl嘗試觸發PropertyChanged事件。

  • ....但沒有人在聽。 PropertyChanged爲null。

我確定沒有別的東西被分配給目標屬性,所以它應該仍然被綁定。爲什麼綁定不在監聽PropertyChanged事件?

回答

2

好吧,我自己找到了答案。這是在Silverlight中的錯誤..

,做以下

if (PropertyChanged != null) 
{ 
    PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
} 

必須直接在您綁定,而不是它的祖先類的代碼。我將它放在基類的FirePropertyChanged()方法中,並將它移動到派生類中,從而產生了不同。

+1

當時不知道這是否是一個bug,但在Silverlight 4中絕對不是這樣。 – Subfuzion 2011-10-05 15:45:17

0

對於任何遇到此問題的人:請確保您在ViewModel上實施INotifyPropertyChanged!