将ObservableCollection替换为另一个未触发的PropertyChanged

时间:2012-10-11 09:31:23

标签: c# observablecollection inotifypropertychanged

我在服务器上有一些JSON api,我想用它来聊天。所以我使用HttpWebRequest, Respond,...和反序列化为ObservableCollection<ChatMessage>。一切都好。我有我的类添加到datacontext并且该类包含上面的集合(ObservableCollection<ChatMessage> entries并且它绑定到列表框并且一切都显示正常。现在如果我想在一段时间后重新加载该文件的内容在我做的服务器上我第一次做的所有事情,并将entries中的集合替换为新的集合。但是这不会触发PropertyChangedCollectionChanged并且视图仍然绑定到旧集合。所以是什么最好的“解决”这个?

1 个答案:

答案 0 :(得分:1)

从技术上讲,你的收藏不会改变 - 它会被新的收藏所取代,因此CollectionChanged不会被解雇。

您需要在包装类上实现INotifyPropertyChanged,当您替换该集合时,触发PropertyChanged事件以通知UI。

另一种解决方案是不替换集合,而是清除其项目并将新条目添加到该集合中。您可以通过比较集合(旧的和新的)并添加新条目/删除不再在新列表中的条目,以更智能的方式执行此操作。