在反序列化XML文件后更新应用程序数据结构

时间:2017-09-19 13:51:41

标签: c# xml wpf

在反序列化XML文件后更新基于ObservableCollection的数据结构的最简单方法是什么?

  1. 清除当前数据结构并添加XML反序列化中的元素,从而保持DataContext绑定。
  2. 创建一个新的数据结构,并将DataContext设置为新结构。
  3. 将Window DataContext设置为null,然后返回其ViewModel工作。但是然后必须在每个Window和UserControl上重置DataContext,这看起来有点像脏黑客。

    修改

    基于mm8的回答,我找到了这个Enhanced ObservableCollection实现:

    https://www.codeproject.com/Articles/249311/Enhanced-ObservableCollection

    由于我只需要一个可以抑制更改通知的ObservableCollection实现,我发现ReactiveList对我的需求有太多的开销。

1 个答案:

答案 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事件。