J'ai deux ObservableCollections, disons ObservableCollection<Cat>
et ObservableCollections<Dog>
. Chat et Chien dérivent tous deux de la classe Pet. Je veux afficher une liste de tous les animaux domestiques. Comment puis-je faire cela? Je préfère ne pas créer un nouveau ObservableCollection<Pet>
en ajoutant des éléments des deux listes de sources car cette liste deviendra obsolète à mesure que d'autres chats et chiens seront ajoutés aux listes de sources. Je peux penser à deux approches:Comment afficher deux ObservableCollections sous forme de liste unique dans WPF?
1) Créez un "Décorateur" ObservableCollection
qui garde les deux collections sources en tant que membres et les itère à chaque fois.
2) Créer un ObservableCollection<Pet>
qui possède les éléments combinés des deux collections sources, mais qui dépend également des collections sources. Ainsi, si un chat est ajouté à la collection Cat, cette collection est notifiée et il ajoute le nouveau Chat à lui-même.
Existe-t-il un moyen standard pour résoudre ce problème? Je ne veux pas réinventer la roue!
Excellent! Exactement ce que je cherchais. Merci. – Naresh
Eh bien, j'ai essayé de faire fonctionner CompositeCollection pendant quelques heures maintenant, mais je n'arrive pas à le faire fonctionner. Je spécifie comme le ItemSource à mon ComboBox comme ceci (Cats est un ObservableCollection dans mon ViewModel): CompositeCollection> Mais je reçois cette erreur: Impossible de trouver la règle FrameworkElement ou FrameworkContentElement pour l'élément cible. BindingExpression: Path = Cats; DataItem = null; Si je supprime complètement le CompositeCollection et que je le lie directement à ObservableCollection, tout fonctionne. Des indices? –
Naresh
La réponse ici montre comment lier CompositeCollection à partir de XAML: http://stackoverflow.com/questions/6446699/how-do-you-bind-a-collectioncontainer-to-a-collection-in-a-view-model – Govert