【问题标题】:Observablecollection of custom class not updating自定义类的 Observablecollection 未更新
【发布时间】:2013-02-07 19:32:26
【问题描述】:

我正在使用 WPF 并有一个名为例如的自定义类。以这种方式使用的“CustomClass”是observablecollection。我们有一个绑定到这个 OC 的数据网格,它工作得很好,显示数据并且一切都很好,但是当 observablecollection 中的任何项目被更新时,底层网格不会相应地更新。

以前我们一直使用实体数据模型中的类型直接创建 observablecollections,这很有效(显示/更新等),但在使用自定义类时却不行。

在我们的自定义类中是否应该支持接口或某些东西以允许更新发生?

谢谢。

詹姆斯。

【问题讨论】:

  • ObservableCollection 跟踪对集合的更改,而不是对集合内对象的更改。要跟踪单个对象的更改,您需要使它们实现INotifyPropertyChanged。如果你想在集合中的项目发生变化时引发 CollectionChanged 事件,你必须add that functionality yourself
  • 太好了,谢谢。
  • 好的,我把那条评论复制到你的答案中了:)

标签: wpf xaml observablecollection


【解决方案1】:

ObservableCollection 跟踪对集合的更改,而不是对集合内对象的更改。

要跟踪单个对象的更改,您需要使它们实现INotifyPropertyChanged

如果您想在集合中的项目发生更改时引发CollectionChanged 事件,您必须自己添加该功能,如下所示:

public MyConstructor()
{
    MyObservableCollection = new ObservableCollection<MyItem>();
    MyObservableCollection.CollectionChanged += MyObservableCollection_CollectionChanged;
}

void MyObservableCollection_CollectionChanged(object sender, CollectionChangedEventArgs e)
{
    if (e.NewItems != null)
    {
        foreach(MyItem item in e.NewItems)
        {
            MyItem.PropertyChanged += MyItem_PropertyChanged;
        }
    }

    if (e.OldItems!= null)
    {
        foreach(MyItem item in e.OldItems)
        {
            MyItem.PropertyChanged -= MyItem_PropertyChanged;
        }
    }
}

void MyItem_PropertyChanged(object sender, PropertyChange e)
{
    RaisePropertyChanged("MyObservableCollection");
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多