Silverlight - 数据绑定不监听PropertyChanged事件

时间:2008-11-12 13:33:41

标签: silverlight data-binding

有人可以向我解释一下这里发生了什么吗? 我在代码中创建绑定。

目标对象是UserControl
target属性是一个布尔值DependencyProperty
源对象是FrameworkElement并实现INotifyPropertyChanged
source属性的类型为ObservableCollection

会发生什么:

  • 绑定是在代码中创建的,结果BindingExpressionBase看起来很好,模式是OneWay,目标值设置正确(此时)

    绑定b =新绑定();
    b.Path =“SourceProperty”;
    b.Source = SourceObject;
    BindingExpressionBase e = this.SetBinding(TargetProperty,b);

  • 然后,由于另一个数据绑定,源属性会发生变化。 UserControl尝试触发PropertyChanged事件。

  • ....但没有人在听。 PropertyChanged为null。

我确信没有其他任何内容分配给目标属性,因此它仍应绑定。为什么绑定没有监听PropertyChanged事件?

2 个答案:

答案 0 :(得分:2)

好吧,我自己找到了答案。这是Silverlight中的一个错误..

执行以下操作的代码

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

必须直接在您绑定的类上,而不是在其祖先上。我把它放在基类的FirePropertyChanged()方法中,并将它移动到派生类中,这就产生了不同。

答案 1 :(得分:0)

对于遇到此问题的其他人:确保您在ViewModel上实施INotifyPropertyChanged