2009-07-16 4 views
1

J'ai un ListBox qui est lié à une liste de Personnes. Je veux montrer les éléments de la listbox dans une grille. Je peux accomplir ceci avec le code ci-dessous, mais le problème est que avec ce code chaque article a sa propre grille. Je souhaite qu'une grille contienne tous les éléments afin que chaque colonne de la grille soit automatiquement mise à l'échelle de la largeur de la chaîne la plus longue. Je suppose que je devrais lier les données à une grille à la place? Comment?Définir une grille pour contenir tous les éléments d'un ListBox au lieu d'une grille pour chacun utilisant un DataTemplate

<ListBox ItemsSource="{Binding}"> 
    <ListBox.ItemTemplate> 
    <DataTemplate> 
     <Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
      <ColumnDefinition /> 
     </Grid.ColumnDefinitions> 
     <TextBlock Grid.Column="0" Text="{Binding Path=Name}" /> 
     <TextBlock Grid.Column="1" Text="{Binding Path=Age}" /> 
     <TextBlock Grid.Column="2" Text="{Binding Path=Gender}" /> 
     </Grid> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

Répondre

1

Vous pouvez toujours accomplir cela en utilisant la grille à l'intérieur de votre DataTemplate. Vous devez simplement spécifier la propriété jointe IsSharedSizeScope sur votre propriété ListBox et SharedSizeGroup sur les colonnes ColumnDefinitions que vous souhaitez synchroniser.

Vous pouvez également définir le panneau ListBoxes en tant que grille, mais je ne le recommande que si vos objets Person possèdent une propriété ordering qui peut être facilement utilisée pour lier Grid.Row.

Questions connexes