2010-06-18 58 views
4

我有两个ObservableCollections,比如ObservableCollection<Cat>ObservableCollections<Dog>。猫和狗都来自班级宠物。我想显示所有宠物的列表。我该怎么做呢?我更喜欢不想通过添加来自两个源列表中的项目来创建新的ObservableCollection<Pet>,因为随着更多Cats和Dogs添加到源列表中,此列表将变得陈旧。我可以想到两种方法:如何在WPF中将两个ObservableCollections显示为单个列表?

1)创建一个“装饰器”ObservableCollection,它将两个源集合保持为成员并每次迭代它们。

2)创建一个ObservableCollection<Pet>,它具有两个源集合的组合元素,但也依赖于源集合。因此,如果将Cat添加到Cat集合中,则会通知此集合,并将新的Cat添加到其自身。

有没有解决这个问题的标准方法?我不想重新发明轮子!

回答

7

使用CompositeCollection可以聚合多个具有完整集合变更支持的集合和项目。

编辑CompositeCollection不是一个依赖项对象,所以没有数据上下文的概念,因此为什么绑定不起作用。如果添加绑定项目或集合,则必须从后面的代码创建集合。

+1

非常好!正是我在找什么。谢谢。 – Naresh 2010-06-18 13:49:48

+0

好吧,我一直在努力使CompositeCollection现在工作几个小时,但不能让它工作。我将其指定为的ItemSource到我的组合框像这样(猫是我的ViewModel一个ObservableCollection): 但我得到此错误: 找不到管理目标元素的FrameworkElement或FrameworkContentElement。 BindingExpression:路径=猫;的DataItem = NULL; 如果我完全删除CompositeCollection并直接绑定到ObservableCollection,那么一切正常。任何线索? – Naresh 2010-06-19 03:00:24

+0

这里的答案显示了如何绑定来自XAML的CompositeCollection:http://stackoverflow.com/questions/6446699/how-do-you-bind-a-collectioncontainer-to-a-collection-in-a-view-model – Govert 2013-01-18 16:36:03

相关问题