将多个ObservableCollections组合为WPF中的单个ObservableCollection

时间:2018-05-13 08:24:21

标签: c# wpf observablecollection

应该很简单,但无法找到解释此问题解决方案的正确博客文章。

所以场景是有一个对象RuleApp在任何N级深度都有不同的嵌套规则集合(类型为ObservableCollection),我只想将这些特定的集合部分组合在一起来绑定它在WPF中的Hierarchal TreeView

<TreeView ItemsSource="{Binding Rules}" 
    ItemTemplateSelector="{StaticResource RuleTemplateSelector}">
</TreeView>

生命是好的,如果它只是一个ObservableCollection用于绑定,但现在挑战是对底层不同集合的任何更改都应该立即反映在TreeView上,而不需要再次重新绑定集合,因为它的操作成本很高并不是很优雅。

从实现的角度来看,我有一个方法说GetRules返回IEnumerable<Rule>,其中我正在产生结果集合,并在ViewModel中将其新建到ObservableCollection<Rule>,这会在识别时导致重新绑定任何改变(这是不可取的)。现在显然我知道ObservableCollection保留副本而不保持自己与底层集合同步的问题。

RuleApp obj;
// ...
Rules = new ObservableCollection<Rule>(obj.GetRules());

根据我的研究,CompositeCollection是一个有用的类,可以将不同的集合结合起来并保持同步,但问题是嵌套的集合,它们可能会有所不同而且不是固定的。

有什么有用的建议来解决这个问题吗?

0 个答案:

没有答案