Frage

Ich fange gerade WPF zu lernen und ich versuche, eine GridViewRowPresenter innerhalb eines Itemscontrol zu verwenden, um im Wesentlichen die Funktionalität einer einfachen Tabelle in HTML zu kopieren. Das Listview ist nicht geeignet, da es interaktiv ist (was ich nicht will). Ich bin die Bindung an eine generische Liste der Objekte eine unbekannte Größe.

Ich habe eine Liste von einem benutzerdefinierten Objekt, das zwei String-Eigenschaften hat: Vornamen und Nachnamen. Der folgende Code funktioniert:

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

, während das macht nichts:

<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>

Ich bin mir nicht sicher, wo man von hier geht, und ich würde jede Hilfe sehr schätzen! Dank!

War es hilfreich?

Lösung

Wenn Sie ein nicht-interaktiven Raster von Elementen wollen, können Sie eine ItemsControl mit einem Grid verwenden, die freigegebenen Größe Umfang verwendet:

<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>

Ein effizienter Ansatz wäre eine eigene Panel Unterklasse zu schreiben, die in ähnlicher Weise Grid funktioniert (man könnte wahrscheinlich Unterklasse Grid), sondern fügt automatisch Zeilen wie nötig. Dann nutzen Sie diese Panel als ItemsPanel für die ItemsControl.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top