2009-03-27 6 views
4

Je commence juste à apprendre WPF et j'essaie d'utiliser un GridViewRowPresenter à l'intérieur d'un ItemsControl pour dupliquer essentiellement les fonctionnalités d'une simple table en HTML. Le ListView n'est pas approprié car il est interactif (ce que je ne veux pas). Je suis lié à une liste générique d'objets d'une quantité inconnue.WPF GridViewRowPresenter dans un ItemsControl

J'ai une liste d'un objet personnalisé qui possède deux propriétés de chaîne: FirstName et LastName. Le code suivant fonctionne:

<ItemsControl Name="myItemsControl"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Path=FirstName}"/> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

tout cela rend rien:

<ItemsControl Name="myItemsControl"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <GridViewRowPresenter> 
       <GridViewRowPresenter.Columns> 
        <GridViewColumnCollection> 
         <GridViewColumn DisplayMemberBinding="{Binding Path=FirstName}"></GridViewColumn> 
         <GridViewColumn DisplayMemberBinding="{Binding Path=LastName}"></GridViewColumn> 
        </GridViewColumnCollection> 
       </GridViewRowPresenter.Columns> 
      </GridViewRowPresenter> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Je ne sais pas où aller d'ici et je serais très reconnaissant de toute aide! Merci!

Répondre

10

Si vous voulez une grille non interactive des éléments, vous pouvez utiliser un ItemsControl avec un Grid qui utilise la portée de la taille partagée:

<ItemsControl ItemsSource="{Binding Items}" Grid.IsSharedSizeScope="True"> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
      <Grid> 
       <Grid.ColumnDefinitions> 
        <ColumnDefinition Width="*" SharedSizeGroup="FirstName"/> 
        <ColumnDefinition Width="*" SharedSizeGroup="LastName"/> 
       </Grid.ColumnDefinitions> 

       <TextBlock Text="{Binding FirstName}"/> 
       <TextBlock Grid.Column="1" Text="{Binding LastName}"/> 
      </Grid> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

Une approche plus efficace serait d'écrire votre propre Panel sous-classe qui fonctionne similaire à Grid (vous pourriez probablement sous-classer Grid) mais ajoute automatiquement des lignes si nécessaire. Ensuite, utilisez cette Panel comme ItemsPanel pour le ItemsControl.

+0

Je suis confronté à un problème connexe, je souhaite que vous pourriez m'aider, [s'il vous plaît jeter un oeil] (http://stackoverflow.com/questions/4251183/wpf-two-dimentional-datagrid-listview "WPF Two-Dimentional -DataGrid/ListView ") – Shimmy

Questions connexes