应该很简单,但无法找到解释此问题解决方案的正确博客文章。
所以场景是有一个对象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
是一个有用的类,可以将不同的集合结合起来并保持同步,但问题是嵌套的集合,它们可能会有所不同而且不是固定的。
有什么有用的建议来解决这个问题吗?