在反序列化XML文件后更新基于ObservableCollection的数据结构的最简单方法是什么?
将Window DataContext设置为null
,然后返回其ViewModel工作。但是然后必须在每个Window和UserControl上重置DataContext,这看起来有点像脏黑客。
修改
基于mm8的回答,我找到了这个Enhanced ObservableCollection实现:
https://www.codeproject.com/Articles/249311/Enhanced-ObservableCollection
由于我只需要一个可以抑制更改通知的ObservableCollection实现,我发现ReactiveList对我的需求有太多的开销。
答案 0 :(得分:1)
您可以清除并重新填充相同的ObservableCollection<T>
。但您可能希望使用支持禁止更改通知的INotifyCollectionChanged
接口实现,例如ReactiveUI的ReactiveList<T>
:https://github.com/reactiveui/ReactiveUI/blob/b551dfe13c21090b7529bd69539433bbe91b63fb/src/ReactiveUI/ReactiveList.cs。
然后,您可以像这样更新数据绑定集合:
ReactiveList<object> sourceCollection = new ReactiveList<object>();
...
using (sourceCollection.SuppressChangeNotifications())
{
sourceCollection.Clear();
foreach(var item in ...)
sourceCollection.Add(item);
}
...这只会引发一个CollectionChanged
事件。