Question

Je viens juste de commencer l'apprentissage WPF et je suis en train d'utiliser un GridViewRowPresenter à l'intérieur d'un ItemsControl pour dupliquer essentiellement la fonctionnalité d'un tableau simple en HTML. Le ListView ne convient pas car il est interactif (que je ne veux pas). Je suis lier à une liste générique des objets d'une quantité inconnue.

J'ai une liste d'un objet personnalisé qui a 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!

Était-ce utile?

La solution

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 sous-classe Panel qui fonctionne de façon similaire à Grid (vous pouvez probablement sous-classe Grid), mais ajoute automatiquement des lignes si nécessaire. Utilisez ensuite que Panel comme ItemsPanel pour le ItemsControl.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top