2009-02-12 6 views
0

Lors de la liaison de données avec TreeView, comment créer plusieurs niveaux de regroupement pour les éléments affichés? Imaginez que vous vous liez à une classe Shop qui, entre autres, a les propriétés Region et RetailChain. L'effet recherché est d'avoir un TreeView qui affiche les magasins dans la topologie suivante:Regroupement multiniveau à l'aide de CollectionViewSources

+ Region: California 
| + Walmart 
| + Walmart Pacific Beach 
| + Walmart Orange County 
| + Walmart San Diego 
+ Region: New Jersey 
    + Frys 
    | + Frys Electronics NJ 
    + Walmart 
    + Walmart New Jersey 

L'argument décisif est la suivante: Region s ne sont pas liés à Retailer s, et vice versa, de sorte que le Shop (le nœud feuille) est le seul dénominateur commun.

L'utilisation CollectionViewSource permet seulement pour un seul niveau de regroupement (en dépit du fait que la classe CollectionView a des propriétés qui suggèrent groupe multi-niveaux). L'utilisation de HierarchicalDataTemplate ne fonctionne que pour les topologies descendantes auxquelles ce scénario ne se prête pas.

Des suggestions sur comment résoudre ce problème?

Répondre

3

La réponse à mon problème avéré être ceci:

Ajouter plusieurs groupes (via PropertyGroupDescriptor) au CollectionViewSource, puis utilisez un ListBox/DataGrid avec plusieurs GroupStyles. L'effet net de ceci est que les articles de feuille (dans mon exemple, les magasins) sont groupés à deux niveaux distincts.

La sélection de PropertyGroupDescriptor qui apparaît en premier dans CollectionViewSource modifie la propriété "root" dans l'arborescence résultante.

+0

Je pense avoir un scénario similaire au vôtre mais je n'ai pas pu comprendre clairement votre réponse. Pourriez-vous s'il vous plaît m'aider à trouver une solution à cette question http://stackoverflow.com/questions/25482570/how-to-obtain-multi-level-hierarchy-with-collectionviewsource-to-bind-to-semanti – vivekp

+0

Très cool Merci. Mais les exemples de code sont toujours meilleurs que les mots décrivant le code. +1 cependant. – Askolein

0

Vous pouvez toujours écrire du code qui va prétraiter les données et créer un ensemble de classes pour faciliter la liaison.