【发布时间】:2012-07-24 12:05:56
【问题描述】:
我有一个可观察集合的层次结构,有点像这样:
interface IItem
{
ObservableCollection<IItem> Children { get; }
}
给定一个IItem(或ObservableCollection<IItem>),我想构造一个其他可观察的集合,它递归地包含所有子IItem 项目。然后,此集合将用作 WPF 列表视图的数据源(例如)。
修改这些项目中的任何一个以具有其他子项都应该更新生成的 observable 集合。请注意,没有循环引用。
我知道CompositeCollection Class,我相信这应该对我有帮助(我认为我需要的只是一个复合集合,它递归地包含Children 中每个孩子的复合集合),但我可以因为这个类没有能力将孩子“模板化”到所需的复合集合中。
【问题讨论】:
-
一种方法是监听每个子 ObservableCollection 上的事件并更新“扁平化”列表。
-
@RQDQ 这将是我最初的方法,但是我意识到这很容易开始变得非常复杂,因为我需要确保我递归地附加到更改事件并从中分离因为孩子在 heirachy 中被添加和删除。看到
CompositeCollection类,希望有更简单的方法。
标签: c# wpf observablecollection compositecollection