【问题标题】:Manipulating ObservableCollection vs Replacing a List操作 ObservableCollection 与替换列表
【发布时间】:2010-02-25 01:07:46
【问题描述】:

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

最重要的是,我需要为 WPF 前端生成列表/可枚举项以供使用。将枚举连接到字典和在更新为使用 ObservableCollection 时调用 PropertyChanged 并让它自动调用其 CollectionChanged 之间有什么区别。

同步在后台自动进行,一些元素可能会被移除,另一些元素可能会被更新。我想将此信息顺利传播到 WPF 前端和用户。 (即,如果删除了一项,则不必重新初始化整个显示)。我还想在添加和删除项目时添加动画(即淡入和淡出) - 如果我替换整个列表是否有可能,还是会导致每个项目再次淡入?

我也应该这样做:

1) 使用可观察集合并在字典和集合之间编写一些花哨的同步逻辑?

2) 使用 linq 扩展方法将字典转换为可枚举,并在它发生变化时简单地调用可枚举的 propertychanged?

3) 通过在更新列表时替换列表来在字典和列表之间进行同步?

另外,这些如何与仅为 UI 执行的排序和过滤操作一起工作? (即,如果我需要根据用户选择从字典中过滤出一些元素,我应该使用与您推荐的方法类似的方法吗?)

【问题讨论】:

    标签: wpf data-binding synchronization observablecollection


    【解决方案1】:

    如果您在收到更改时“替换”任何IEnumerable<T>,则整个列表将在 UI 中刷新。

    为了避免这种情况,您需要实现INotifyCollectionChanged,并提供一个实现它的集合。您无需替换集合,而是处理元素,然后触发相应的事件。

    ObservableCollection<T> 为您处理此问题。就个人而言,如果您需要将其保存在字典中,但希望将其同步到列表中,您可能需要考虑制作一个自定义集合,可能基于 SortedDictionary。标准字典没有顺序感,这意味着无法适当地实现INotifyCollectionChanged

    【讨论】:

      猜你喜欢
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-05
      • 1970-01-01
      相关资源
      最近更新 更多