我有一个(外部)模型公开一个不断变化的列表(比如说每两秒左右)。ViewModel 知道注册 PropertyChange 事件的列表。该 ViewModel 还为 UI 提供了 ObservableCollection 以进行数据绑定。
+-----------------------------------------------+
| View|
| +-----------+ |
| |Listbox | |
| +-----------+ |
+-----/\----------------------------------------+
||
||DataBinding
||
||
+-----||----------------------------------------+
| || ViewModel|
| +--------------------+ +-------------+|
| |ObservableCollection|<--------|ChangeHandler||
| +--------------------+ / +-------------+|
| / ^ |
+-------------------------/------------|--------+
/ |
/ |
Synchronizing Lists | PropertyChanged
|
|
+--------------------------------------|--------+
| +-----+ Model|
| |IList| |
| +-----+ |
| |
+-----------------------------------------------+
原则上效果很好,除了不断进行的更新。随着每次更新,用户都会失去他的选择,即每次更新都会取消选择所有项目。这并不奇怪,因为 WPF 的 ListBox “看到”分配了一个新列表。
所以,事情一定是我们没有分配新的 ObservableCollection,而是将当前 ObservableCollection 的内容与更新后的 Model.List 合并
现在我的问题
- 同步列表 - 是否有关于如何进行此类合并的最佳实践(或框架)(将新项目复制到 ObservableCollection、删除丢失的项目、更新更改的项目)
- 选定项目 - 我如何确保 ListBox 保留当前选定的项目(除了项目被删除的情况)