2010-06-18 2 views
4

두 개의 ObservableCollections (예 : ObservableCollection<Cat>ObservableCollections<Dog>)가 있습니다. 고양이와 개 모두 애완 동물 학급에서 파생됩니다. 모든 애완 동물의 목록을 표시하고 싶습니다. 어떻게해야합니까? 두 개의 소스 목록에있는 항목을 추가하여 새로운 ObservableCollection<Pet>을 새로 만들지 않으려 고합니다. 더 많은 고양이와 개가 소스 목록에 추가 될 때이 목록이 부실해지기 때문입니다.ObservableCollection 두 개를 WPF에서 단일 목록으로 표시하는 방법은 무엇입니까?

1) 두 소스 컬렉션을 구성원으로 유지하고 매번 반복 할 수있는 "Decorator"ObservableCollection을 만듭니다.

2) 두 원본 컬렉션의 요소가 결합되어 있지만 원본 컬렉션에도 종속적 인 ObservableCollection<Pet>을 만듭니다. 따라서 Cat이 Cat 컬렉션에 추가되면이 컬렉션에 통지되고 새로운 Cat이 추가됩니다.

이 문제를 해결하는 표준 방법이 있습니까? 나는 바퀴를 재발 명하고 싶지 않아!

답변

7

CompositeCollection을 사용하여 전체 모음 변경 지원 기능이있는 여러 모음 및 항목을 집계하십시오.

편집 : CompositeCollection은 종속성 개체가 아니므로 데이터 컨텍스트가 없으므로 바인딩이 작동하지 않습니다. 바인딩 된 항목이나 컬렉션을 추가하는 경우 코드 숨김에서 컬렉션을 만들어야합니다.

+1

우수! 정확히 내가 무엇을 찾고 있었는지. 감사. – Naresh

+0

글쎄, 나는 몇 시간 동안 CompositeCollection을 작동 시키려고 노력해 왔지만 작동시키지 못한다. 나는이 같은 내 콤보 상자에 ItemSource로 지정하고 (고양이 나의 뷰 모델의 ObservableCollection에있다) : 하지만 얻을 이 오류 : 대상 요소에 대해 FrameworkElement 또는 FrameworkContentElement를 찾을 수 없습니다. BindingExpression : Path = Cats; DataItem = null; CompositeCollection을 완전히 제거하고 곧바로 ObservableCollection에 바인딩하면 모든 것이 작동합니다. 모든 단서? – Naresh

+0

여기에 대한 대답은 XAML에서 CompositeCollection을 바인딩하는 방법을 보여줍니다. http://stackoverflow.com/questions/6446699/how-do-you-bind-a-collectioncontainer-to-a-collection-in-a-view-model – Govert

관련 문제