如何在WPF中将两个ObservableCollection显示为单个列表?

4
我有两个ObservableCollections,分别是ObservableCollection<Cat>ObservableCollections<Dog>。Cat和Dog都继承自Pet类。我想显示所有宠物的列表。我应该怎么做呢?我不想通过从这两个源列表中添加项目来创建一个新的ObservableCollection<Pet>,因为随着更多的猫和狗被添加到源列表中,这个列表将变得过时。我能想到两种方法:
1)创建一个“装饰器”ObservableCollection,将这两个源集合作为成员并在每次迭代时遍历它们。
2)创建一个ObservableCollection<Pet>,其中包含两个源集合的组合元素,但也依赖于源集合。因此,如果向猫集合中添加了一只猫,该集合会被通知并将新的猫添加到自己中。
是否有标准的解决此问题的方法?我不想重复造轮子!
1个回答

7
使用CompositeCollection来聚合多个集合和项,并提供完整的集合更改支持。 编辑: CompositeCollection不是依赖对象,所以没有数据上下文的概念,因此绑定不起作用。如果添加了绑定的项或集合,则必须从代码后台创建集合。

我一直在尝试让CompositeCollection工作,但是已经尝试了几个小时,仍然无法使其正常工作。我将其指定为我的ComboBox的ItemSource,如下所示(Cats是ViewModel中的ObservableCollection):<CompositeCollection> <CollectionContainer Collection="{Binding Cats}" /> </CompositeCollection> 但我得到了以下错误:无法找到目标元素的管理FrameworkElement或FrameworkContentElement。BindingExpression:Path=Cats; DataItem=null;如果我完全删除CompositeCollection并直接绑定到ObservableCollection,则所有内容均正常工作。有什么线索吗? - Naresh
这个答案展示了如何在XAML中绑定CompositeCollection:https://dev59.com/questions/--o6XIcBkEYKwwoYSClJ - Govert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接