2010-10-07 6 views
1

C'est la première fois que j'ai posté une photo, donc j'espère que ça se passe bien (une image vaut mille mots, et je ne veux pas taper un millier de mots). Mais, l'image ci-dessous est ce que j'essaie d'accomplir.WPF ItemsControl ItemTemplate frontière avec GroupStyle

J'ai une collection d'objets dont j'ai besoin regroupés par propriété "Groupe". J'utilise une CollectionViewSource liée à ma source de données qui effectue le regroupement pour moi.

J'utilise un contrôle ItemsControl (mais pourrait facilement utiliser un autre contrôle) pour afficher cette information. Je suis en mesure de regrouper l'information par la propriété, mais j'aimerais pouvoir entourer tout le groupe d'une bordure. Je ne veux pas entourer chaque élément du groupe par tout le groupe.

Comment puis-je accomplir quelque chose comme l'image ci-dessous avec une bordure autour du groupe entier?

alt text

Répondre

2

quelque chose comme ça devrait faire l'affaire. utilisez ceci comme votre style de groupe. Vous voudrez probablement personnaliser cela davantage, mais vous devriez pouvoir obtenir l'idée générale de cet extrait.

La principale chose à savoir est que vous liez un GroupItem. Fondamentalement, il existe 3 propriétés sur un GroupItem. le Nom (du groupe), le ItemCount (combien d'éléments dans votre groupe) et les éléments eux-mêmes.

<ControlTemplate TargetType="{x:Type GroupItem}"> 

    <Border BorderBrush="Black" BorderThickness="1" Margin="5"> 
     <StackPanel> 
      <TextBlock Text="{Binding Name}"/> 
      <Border BorderBrush="Black" BorderThickness="1" Margin="0,0,0,0"> 
       <ItemsPresenter /> 
      </Border> 
     </StackPanel> 
    </Border> 

</ControlTemplate> 

EDIT: Lorsque vous groupez une collection d'articles, la source n'est pas une collection de vos articles, mais une collection de GroupItems, wich contient alors les éléments de votre collection qui appartiennent à ce groupe. C'est pourquoi le x:Type est GroupItem. Aucune liaison n'est requise ici, sinon les propriétés de GroupItem que vous souhaitez afficher.

Vous devez mettre dans votre <ItemControl> XAML comme ceci:

<ItemsControl> 
     <ItemsControl.GroupStyle> 
<!-------------- style from above goes here ---------------> 
     <ItemsControl.GroupStyle/> 
    <ItemsControl/> 

here est un article sur le regroupement en WPF pour vous aider.

+0

Je ne suis pas sûr que je vois la connexion à l'endroit où vous mettez ceci dans votre XAML. Pourquoi déclarez-vous le x: Type comme GroupItem? Où liez-vous l'itemsource et où utilisez-vous ce modèle de contrôle? – Miles

Questions connexes