【发布时间】:2017-09-19 13:51:40
【问题描述】:
在反序列化 XML 文件后更新基于 ObservableCollection 的数据结构的最简单方法是什么?
- 清除当前数据结构并添加来自 XML 反序列化的元素,从而保留 DataContext 绑定。
- 创建一个新的数据结构,并将 DataContext 设置为新的结构。
将 Window DataContext 设置为 null 然后返回其 ViewModel 有效。但是随后必须在每个 Window 和 UserControl 上重置 DataContext,这似乎有点像一个肮脏的 hack。
编辑:
根据mm8 的回答,我发现了这个Enhanced ObservableCollection 实现:
https://www.codeproject.com/Articles/249311/Enhanced-ObservableCollection
由于我只需要一个可以抑制更改通知的 ObservableCollection 实现,我发现 ReactiveList 对我的需求来说开销太大。
【问题讨论】:
-
清除并重新填充同一个 ObservableCollection 怎么样?
-
这就是我对第一个选项的意思(请参阅改进的问题格式)。但是哪个更好呢?
-
问题是数据结构在 View 之前被实例化,在某些情况下它绑定到某些 ObservableCollections 中的第一个元素。因此,在清除 ObservableCollection 时,我将创建一种情况,即在再次填充 ObservableCollection 之前,视图绑定到不存在的元素。