Вопрос

Я только начинаю изучать WPF и пытаюсь использовать GridViewRowPresenter внутри ItemsControl, чтобы по существу дублировать функциональность простой таблицы в HTML.ListView не подходит, поскольку он интерактивный (чего мне не нужен).Я привязываюсь к общему списку объектов неизвестного количества.

У меня есть список пользовательского объекта, который имеет два строковых свойства:Имя и фамилия.Следующий код работает:

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

пока это ничего не делает:

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

Я не уверен, куда идти дальше, и я был бы очень признателен за любую помощь!Спасибо!

Это было полезно?

Решение

Если вам нужна неинтерактивная сетка элементов, вы можете использовать ItemsControl с Grid который использует область общего размера:

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

Более эффективным подходом было бы написать свой собственный Panel подкласс, который работает аналогично Grid (вероятно, вы могли бы создать подкласс Grid), но автоматически добавляет строки по мере необходимости.Тогда используйте это Panel как ItemsPanel для ItemsControl.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top