2013-02-07 25 views
0

我正在使用WPF並有一個自定義的類,例如。 「CustomClass」是以這種方式使用observablecollection。我們有一個綁定到這個OC的數據網格,它工作的很好,數據被顯示並且一切正常,但是當observablecollection中的任何項目被更新時,底層網格並沒有相應地更新。自定義類的Observablecollection不更新

以前我們一直使用實體數據模型中的類型直接創建observablecollections,這很適用(顯示/更新等),但在使用自定義類時沒有。

是否有一個接口或我們應該在我們的自定義類中支持以允許更新發生?

謝謝。

James。

+4

'ObservableCollection'跟蹤更改集合,未改變集合中的對象。要跟蹤單個對象中的更改,需要使其實現[INotifyPropertyChanged](http://msdn.microsoft.com/zh-cn/library/system.componentmodel.inotifypropertychanged.aspx)。如果您想在集合中的項目發生更改時引發CollectionChanged事件,則必須[自己添加該功能](http://stackoverflow.com/a/7713542/302677) – Rachel

+0

這很好,謝謝。 – xnetdude

+0

好的,我將該評論複製到了你的答案:) – Rachel

回答

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"); 
}