wpf - 操作 ObservableCollection 与替换列表

标签 wpf data-binding synchronization observablecollection

我有一个用于同步的后端字典(即同步到文件存储和网络服务)。

最重要的是,我需要为 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/

相关文章:

c# - 如何在 WPF 中一次只选择一个复选框?

c# - 不支持关键字 : 'version'

c# - 如何在 WPF(MVVM/ Entity Framework )中更新表单时显示从数据库到 TextBlock 的外键数据值?

synchronization - 测试和设置的用途是什么?

wpf - 如何在不定义每一行的情况下设置网格列/行大小?

c# - 如何直接绑定(bind)到 subview 模型?

c# - 部分 BindingList 到字符串数组

c# - DataBindings.Add 使用 IEnumerable<string>

iphone - iOS iPhone如何处理 "User can use app from multiple devices"这样的要求?

java - 多线程生产者/消费者同步问题