2010-09-26 10 views
6

Je souhaite organiser les éléments d'une collection dans une grille avec un nombre spécifique de colonnes et de rangées (disons 4x6). Chaque élément expose les propriétés de dépendance (entier) X et Y et doit être placé dans la cellule correspondante de la grille. Notez que la collection peut changer pendant l'exécution, ce qui devrait mettre à jour les éléments de la grille.Organisation des éléments de la collection dans une grille

Je n'ai pas trouvé de bonne solution. Mais peut-être que c'est même possible sans utiliser le code-behind?

Cela ne me dérange pas la conversion ou quelque chose. Ce truc change quand même. La classe de collection utilisée n'est pas importante. (Vous pouvez en choisir un.)

Comment puis-je résoudre ce problème? Toutes les suggestions appropriées seraient les bienvenus, merci.

Répondre

6
<ItemsControl ItemsSource="{Binding YourItems}"> 
    <ItemsControl.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Grid/> 
     </ItemsPanelTemplate> 
    </ItemsControl.ItemsPanel> 
    <ItemsControl.ItemContainerStyle> 
     <Style> 
      <Setter Property="Grid.Column" Value="{Binding X}"/> 
      <Setter Property="Grid.Row" Value="{Binding Y}"/> 
     </Style> 
    </ItemsControl.ItemContainerStyle> 
</ItemsControl> 
+1

bonne solution, même si vous avez besoin de mettre Grid.RowDefinitions et Grid.ColumnDefinitions là-bas avec le maximum de X et Y RowDefinition et ColumnDefinition, respectivement .... sinon ils vont simplement se chevaucher-autre. – Goblin

+0

Il convient de mentionner que vous devez utiliser 'ItemContainerStyle' pour cela. Vous ne pouvez pas simplement définir 'Grid.Row' et' Grid.Column' dans 'ItemTemplate' car tout élément généré par' ItemTemplate' est enveloppé dans le conteneur généré par 'ItemsControl' et le' Grid.Row 'et' Grid.Column' doivent être définis sur ce conteneur pour que 'Grid' les voit. –

+0

Fonctionne bien, merci. @Robert: Merci pour l'explication. Je ne savais même pas que les Grilles généraient des conteneurs ... –