对事件的更新ObservableCollection
是通过挂钩CollectionChanged
事件来处理的,因此当您创建新的观察者时,ObservableCollection
您的观察者仍在查看旧集合。
两个简单的建议是INotifyPropertyChanged
在包含 的类上实现ObservableCollection
并在集合属性的设置器中引发PropertyChanged
事件(如果它是您自己的代码,请不要忘记首先在您的观察者中从旧的取消挂钩)。
private ObservableCollection<string> _myCollection = new ObservableCollection<string>();
public ObservableCollection<string> MyCollection
{
get { return _myCollection; }
set
{
if(_myCollection == value)
return;
_myCollection = value;
RaisePropertyChanged("MyCollection");
}
}
其次,我通常更喜欢的选项是在新数据到达时清除并重新填充集合。
public void HandleCollectionData(IEnumerable<string> incomingData)
{
MyCollection.Clear();
foreach(var item in incomingData)
{
MyCollection.Add(item);
}
}