ItemsControl中的WPF GridViewRowPresenter

时间:2009-03-27 20:24:25

标签: wpf data-binding itemscontrol

我刚刚开始学习WPF,我试图在ItemsControl中使用GridViewRowPresenter来实质上复制HTML中简单表的功能。 ListView不合适,因为它是交互式的(我不想要)。我绑定到未知数量的对象的通用列表。

我有一个自定义对象的列表,它有两个字符串属性:FirstName和LastName。以下代码有效:

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

我不确定从哪里开始,我非常感谢任何帮助!谢谢!

1 个答案:

答案 0 :(得分:11)

如果您想要非交互式项目网格,可以使用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的{​​{1}}。