Общие сведения об элементе управления ListView

Элемент управления ListView предоставляет инфраструктуру для отображения набора элементов данных в различных макетах или представлениях. Например, у пользователя может возникнуть потребность в отображении элементов данных в таблице, а также в сортировке ее столбцов.

В этом разделе содержатся следующие подразделы.

  • Понятие об элементе управления ListView
  • Определение режима представления для элемента управления ListView
  • Привязка данных к элементу управления ListView
  • Применение стилей к ListView, реализующему GridView
  • Совместное использование одного режима представления
  • Создание настраиваемого режима представления
  • Связанные разделы

Понятие об элементе управления ListView

Элемент управления ListView является ItemsControl, который является производным от ListBox. Как правило, его элементы являются членами коллекции данных и представляются как объекты ListViewItem. ListViewItem является ContentControl и может содержать только один дочерний элемент. Однако дочерним элементом может быть любой визуальный элемент.

Определение режима представления для элемента управления ListView

Чтобы задать режим просмотра содержимого элемента управления ListView, необходимо задать значение свойства View. Одним из режимов, предоставляемых Windows Presentation Foundation (WPF), является 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>

На следующем рисунке показано, как будут отображаться данные для предыдущего примера.

ListView с выводом GridView

Можно создать пользовательский режим представления путем определения класса, наследуемого от класса ViewBase. Класс ViewBase предоставляет инфраструктуру, которая необходима для создания пользовательского режима представления. Дополнительные сведения о создании пользовательского представления см. в разделе Практическое руководство. Создание пользовательского режима представления для ListView.

Привязка данных к элементу управления ListView

Используйте свойства Items и ItemsSource, чтобы указать элементы для элемента управления ListView. В следующем примере свойству ItemsSource присваивается значение коллекции данных, которая называется EmployeeInfoDataSource.

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

В GridView объекты GridViewColumn привязаны к заданным полям данных. В следующем примере объект GridViewColumn привязывается к полю данных путем указания Binding для свойства DisplayMemberBinding.

Dim gvc1 As New GridViewColumn()
gvc1.DisplayMemberBinding = New Binding("FirstName")
gvc1.Header = "FirstName"
gvc1.Width = 100
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, предназначенного для применения стиля к ячейкам столбца. В следующем примере DataTemplate, который идентифицируется с помощью ключа ResourceKey, задает Binding для GridViewColumn. Обратите внимание, что в этом примере не определен DisplayMemberBinding, так как это переопределяет привязку, заданную DataTemplate.

<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"
      CellTemplate="{StaticResource myCellTemplateMonth}"/>

Применение стилей к ListView, реализующему GridView

Элемент управления ListView содержит объекты ListViewItem, представляющие отображаемые элементы данных. Можно использовать следующие свойства для определения содержимого и стиля элементов данных:

Чтобы избежать проблем выравнивания между ячейками в GridView, не используйте ItemContainerStyle для задания свойств или добавление содержимого, которое влияет на ширину элемента в ListView. Например, может возникнуть проблема выравнивания при задании свойства Margin в ItemContainerStyle. Чтобы задать свойства или определить содержимое, которое влияет на ширину элементов в GridView, используйте свойства класса GridView и его связанных классов, таких как GridViewColumn.

Дополнительные сведения о том, как использовать GridView и его вспомогательные классы, см. в разделе Общие сведения о GridView.

Если определить ItemContainerStyle для элемента управления ListView и также определить ItemTemplate, необходимо включить ContentPresenter в стиль для правильной работы ItemTemplate.

Не используйте свойства HorizontalContentAlignment и VerticalContentAlignment для содержимого ListView, которое отображается с помощью GridView. Чтобы задать выравнивание содержимого в столбце GridView, определите свойство CellTemplate.

Совместное использование одного режима представления

Два элемента управления ListView не могут совместно использовать один режим в одно и то же время. При попытке использования одного режима более, чем одним элементом управления ListView возникает исключение.

Чтобы указать режим представления, который может одновременно использоваться более, чем одним ListView, используйте шаблоны или стили. Пример определения представления как свойства Resources см. в разделе Пример "ListView with Multiple Views".

Создание настраиваемого режима представления

Настраиваемые представления, такие как GridView, являются производными от абстрактного класса ViewBase, который предоставляет средства для отображения элементов данных, представленных как объекты ListViewItem.

Пример настраиваемого режима представления см. в разделе Пример "ListView with Multiple Views".

См. также

Ссылки

GridView

ListView

ListViewItem

Binding

Основные понятия

Общие сведения о GridView

Оптимизация производительности: элементы управления

Другие ресурсы

Практические руководства, посвященные ListView