我有一个用于同步的后端字典(即同步到文件存储和网络服务)。
最重要的是,我需要为 WPF 前端生成要使用的列表/枚举。将可枚举对象挂接到字典和在更新为使用 ObservableCollection 时调用 PropertyChanged
并让它自动调用其 CollectionChanged
之间有什么区别。
同步在后台自动发生,一些元素可能会被删除,其他元素可能会被更新。我想顺利地将此信息传播到 WPF 前端和用户。 (即,如果删除了一项,则不必重新初始化整个显示)。我还想在添加和删除项目时添加动画(即淡入和淡出)- 如果我替换整个列表,这是否可能,或者它会导致每个项目再次淡入吗?
我也应该:
1) 使用可观察集合并在字典和集合之间编写一些奇特的同步逻辑?
2) 使用 linq 扩展方法将字典转换为可枚举对象,并在可枚举对象更改时简单地调用 propertychanged?
3) 在字典和列表之间同步,通过在列表更新时替换列表?
此外,这些中的任何一个如何处理仅为 UI 执行的排序和过滤操作? (即,如果我需要根据用户选择从字典中过滤出一些元素,我是否应该使用与您推荐的方法类似的方法?)
最佳答案
如果您“替换”任何IEnumerable<T>
当您进行更改时,整个列表将在 UI 中刷新。
为了避免这种情况,您需要实现 INotifyCollectionChanged
,并提供一个实现它的集合。您无需替换集合,而是处理元素,这些元素又会触发相应的事件。
ObservableCollection<T>
为你处理这个。就个人而言,如果您需要将其保存在字典中,但又想将其同步到列表中,您可能需要考虑制作一个自定义集合,可能基于 SortedDictionary
。 .标准字典没有顺序感,这意味着无法实现 INotifyCollectionChanged
。适本地。
关于wpf - 操作 ObservableCollection 与替换列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2330882/