Observablecollection自定义类不更新

时间:2013-02-07 19:32:26

标签: wpf xaml observablecollection

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

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

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

感谢。

詹姆斯。

1 个答案:

答案 0 :(得分: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");
}