ListView 概述

更新:2007 年 11 月

ListView 控件提供了一个基础结构,用于在不同的布局或视图中显示一组数据项。例如,用户可能需要在表中显示数据项,并同时对表的列进行排序。

本主题包括下列各节。

  • 什么是 ListView?
  • 为 ListView 定义视图模式
  • 将数据绑定到 ListView
  • 为实现 GridView 的 ListView 设置样式
  • 共用同一视图模式
  • 创建自定义视图模式
  • 相关主题

什么是 ListView?

ListView 控件是一种从 ListBox 派生而来的 ItemsControl。通常,该控件的项是数据集合的成员,并且表示为 ListViewItem 对象。ListViewItem 是一种 ContentControl,并且只能包含单一子元素。但是,该子元素可以是任何可视元素。

为 ListView 定义视图模式

若要为 ListView 控件的内容指定视图模式,请设置 View 属性。Windows Presentation Foundation (WPF) 提供的一个视图模式是 GridView,该模式在具有可自定义的列的表中显示数据项集合。

下面的示例演示如何为显示雇员信息的 ListView 控件定义 GridView。有关完整示例,请参见使用 GridView 的 ListView 的示例

<ListView ItemsSource="{Binding Source=
                       {StaticResource EmployeeInfoDataSource}}">

  <ListView.View>

    <GridView AllowsColumnReorder="true"
              ColumnHeaderToolTip="Employee Information">

      <GridViewColumn DisplayMemberBinding=
                          "{Binding Path=FirstName}" 
                      Header="First Name" Width="100"/>

                  <GridViewColumn DisplayMemberBinding=
                          "{Binding Path=LastName}" 
                      Width="100">
                      <GridViewColumnHeader>Last Name
                          <GridViewColumnHeader.ContextMenu>
                          <ContextMenu  MenuItem.Click="LastNameCM_Click"  
                                        Name="LastNameCM">
                              <MenuItem Header="Ascending" />
                              <MenuItem Header="Descending" />
                          </ContextMenu>
                          </GridViewColumnHeader.ContextMenu>
                      </GridViewColumnHeader>
                  </GridViewColumn>

                  <GridViewColumn DisplayMemberBinding=
                          "{Binding Path=EmployeeNumber}" 
                      Header="Employee No." Width="100"/>
    </GridView>

  </ListView.View>
</ListView>

下图演示了前面示例的数据显示方式。

具有 GridView 输出的 ListView

您可以通过定义一个从 ViewBase 类继承的类来创建自定义视图模式。ViewBase 类提供了创建自定义视图所需的基础结构。有关如何创建自定义视图的更多信息,请参见如何:为 ListView 创建自定义视图模式

将数据绑定到 ListView

使用 ItemsItemsSource 属性为 ListView 控件指定项。下面的示例将 ItemsSource 属性设置为一个名为 EmployeeInfoDataSource 的数据集合。有关完整示例,请参见使用 GridView 的 ListView 的示例

<ListView ItemsSource="{Binding Source=
                       {StaticResource EmployeeInfoDataSource}}">

GridView 中,GridViewColumn 对象绑定到指定的数据字段。下面的示例通过为 DisplayMemberBinding 属性指定 Binding,将 GridViewColumn 对象绑定到数据字段。有关完整示例,请参见使用 GridView 的 ListView 的示例

GridViewColumn gvc1 = new GridViewColumn();
gvc1.DisplayMemberBinding = new Binding("FirstName");
gvc1.Header = "FirstName";
gvc1.Width = 100;
<GridViewColumn DisplayMemberBinding=
                    "{Binding Path=FirstName}" 
                Header="First Name" Width="100"/>

您也可以指定 Binding 作为 DataTemplate 用于为列中的单元格设置样式的定义的一部分。在下面的示例中,用 ResourceKey 标识的 DataTemplateGridViewColumn 设置 Binding。请注意,此示例未定义 DisplayMemberBinding,因为这样做将覆盖 DataTemplate 指定的绑定。有关完整示例,请参见 结合使用 GridView 和模板的 ListView 的示例

<DataTemplate x:Key="myCellTemplateMonth">
  <DockPanel>
    <TextBlock Foreground="DarkBlue" HorizontalAlignment="Center">
      <TextBlock.Text>
        <Binding Path="Month"/>
      </TextBlock.Text>
    </TextBlock>
  </DockPanel>
</DataTemplate>
<GridViewColumn Header="Month" Width="80"
      HeaderContainerStyle="{StaticResource myHeaderStyle}"
      HeaderTemplate="{StaticResource myHeaderTemplate}"
      DisplayMemberBinding="{Binding Path=Month}"/>

为实现 GridView 的 ListView 设置样式

ListView 控件包含 ListViewItem 对象,这些对象代表显示的数据项。您可以使用以下属性来定义数据项的内容和样式:

为了避免 GridView 中的单元格之间出现对齐问题,请不要使用 ItemContainerStyle 来设置属性,或添加对 ListView 中项的宽度有影响的内容。例如,如果在 ItemContainerStyle 中设置 Margin 属性,则可能会出现对齐问题。若要指定属性或定义对 GridView 中项的宽度有影响的内容,请使用 GridView 类及其相关类(如 GridViewColumn)的属性。

有关如何使用 GridView 及其支持类的更多信息,请参见 GridView 概述

如果为 ListView 控件定义 ItemContainerStyle 并同时定义 ItemTemplate,您必须在样式中包括 ContentPresenter 才能使 ItemTemplate 正常工作。

不要为通过使用 GridView 显示的 ListView 内容使用 HorizontalContentAlignmentVerticalContentAlignment 属性。若要指定 GridView 的列中内容的对齐方式,请定义 CellTemplate

共用同一视图模式

两个 ListView 控件不能同时共用同一个视图模式。如果尝试将同一视图模式用于多个 ListView 控件,则会出现异常。

若要指定可同时由多个 ListView 使用的视图模式,请使用模板或样式。有关如何定义视图作为 Resources 的示例,请参见具有多个视图的 ListView 的示例

创建自定义视图模式

诸如 GridView 的自定义视图派生自 ViewBase 抽象类,该类提供了一些工具,用于显示表示为 ListViewItem 对象的数据项。

有关自定义视图模式的示例,请参见具有多个视图的 ListView 的示例

请参见

概念

GridView 概述

优化性能:控件

参考

GridView

ListView

ListViewItem

Binding

其他资源

ListView 帮助主题

ListView 示例