对事件的更新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);
}
}