2009-08-18 10 views
0

J'ai une collection observable d'éléments, où chaque élément a un nom et un "nom de groupe" (les deux chaînes). La partie délicate est, en XAML, j'ai besoin de styliser cette collection de telle sorte que tous les éléments avec le même nom de groupe soient listés les uns à côté des autres, et le nom du groupe est affiché en haut.Tricky WPF problème de style - pouvez-vous le faire?

J'ai conçu des contrôles utilisateur pour la mise en page du nom de groupe, ainsi que la disposition de chaque élément affiché. J'ai joué avec ItemsControl mais je n'ai aucune idée du style pour que les éléments du même groupe soient "fusionnés" dans le même ItemsControl qui utilise le contrôle utilisateur ItemControl générique comme source, avec le nom du groupe affiché en haut. Je l'ai fait en utilisant une collection de "groupes", avec une collection d'éléments à l'intérieur de chaque groupe, parce que les liaisons fonctionnent parfaitement. Cependant, je n'ai pas tenu compte du fait que chaque élément peut être dans plus d'un groupe (pensez à une personne comme étant dans un groupe "amis du travail" ainsi que "collègues", donc il doit être dupliqué).

Des conseils ou des solutions sont très appréciés :)

Répondre

1

Tout d'abord, utilisez un CollectionViewSource pour trier les éléments:

<CollectionViewSource x:Key="SortedItems" Source="{Binding YourUnsortedItems}"> 
    <CollectionViewSource.SortDescriptions> 
     <scm:SortDescription PropertyName="GroupName"/> 
    </CollectionViewSource.SortDescriptions> 
</CollectionViewSource> 

Rabattre ensuite à partir de votre ItemsControl (ou autre):

<ItemsControl Source="{Binding Source={StaticResource SortedItems}}"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <!-- stick your template for each item here --> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 
+0

Consultez http://www.beacosta.com/blog/?p=17 pour un bon exemple. –