【问题标题】:Silverlight - Data binding not listening for PropertyChanged eventSilverlight - 数据绑定不监听 PropertyChanged 事件
【发布时间】:2010-09-21 23:40:56
【问题描述】:

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

目标对象是一个用户控件
目标属性是一个布尔 DependencyProperty
源对象是一个 FrameworkElement 并实现 INotifyPropertyChanged
source 属性的类型为 ObservableCollection

会发生什么:

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

    绑定 b = new Binding();
    b.Path = "SourceProperty";
    b.Source = SourceObject;
    BindingExpressionBase e = this.SetBinding(TargetProperty, b);

  • 源属性随后会因另一个数据绑定而更改。 UserControl 尝试触发 PropertyChanged 事件。

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

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

【问题讨论】:

    标签: silverlight data-binding


    【解决方案1】:

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

    执行以下操作的代码

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

    必须直接在您绑定的类上,而不是在其祖先上。我将它放在基类的 FirePropertyChanged() 方法中,然后将它移到派生类中会有所不同。

    【讨论】:

    • 当时不知道这是否是一个错误,但在 Silverlight 4 中绝对不再是这种情况了。
    【解决方案2】:

    对于遇到这种情况的其他人:确保在 ViewModel 上实现 INotifyPropertyChanged

    【讨论】:

      猜你喜欢
      • 2018-08-14
      • 2019-02-14
      • 2020-10-10
      • 2014-08-30
      • 2014-06-24
      • 2013-03-28
      • 1970-01-01
      • 2014-03-31
      • 1970-01-01
      相关资源
      最近更新 更多