有人可以向我解释一下这里发生了什么吗? 我在代码中创建绑定。
目标对象是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事件?
答案 0 :(得分:2)
好吧,我自己找到了答案。这是Silverlight中的一个错误..
执行以下操作的代码
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
必须直接在您绑定的类上,而不是在其祖先上。我把它放在基类的FirePropertyChanged()方法中,并将它移动到派生类中,这就产生了不同。
答案 1 :(得分:0)
对于遇到此问题的其他人:确保您在ViewModel上实施INotifyPropertyChanged !