Отображение списка

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

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

Снимок экрана: listView с выходными данными в GridView, отображающими сведения о файле.

Замечание

Типы, на которые ссылается эта статья, доступны в разделе справочника по коду .

В следующей таблице перечислены распространенные задачи для работы с элементом управления ListView:

Название Description
Сортировка столбца GridView при нажатии на заголовок Узнайте, как сортировать столбец GridView при щелчке заголовка.
Создание пользовательского режима представления для ListView Узнайте, как создать настраиваемый режим представления для ListView.
Шаблоны для оформления ListView с использованием GridView Узнайте, как использовать шаблоны для стиля ListView, использующего GridView.
Создание стиля для заголовка перетаскиваемого столбца GridView Узнайте, как создать стиль для перетаскиваемого заголовка столбца GridView.
Отображение содержимого ListView с помощью GridView Узнайте, как отобразить содержимое ListView с помощью GridView.
Использование триггеров для стиля выбранных элементов в ListView Узнайте, как использовать триггеры для стиля выбранных элементов в ListView.
Создание ListViewItems с помощью флажка Узнайте, как создать ListViewItems с помощью checkBox.
Отображение данных с помощью GridViewRowPresenter Узнайте, как отображать данные с помощью GridViewRowPresenter.
Группируйте элементы в ListView, реализующем GridView Узнайте, как группировать элементы в ListView, который использует GridView.
Стиль строки в ListView, реализующей GridView Узнайте, как стилизовать строку в ListView, реализующем GridView.
Изменение горизонтального выравнивания столбца в ListView Узнайте, как изменить горизонтальное выравнивание столбца в ListView.
Обработка события MouseDoubleClick для каждого элемента в ListView Узнайте, как обрабатывать событие MouseDoubleClick для каждого элемента в ListView.

Стили и шаблоны

Вы можете изменить значение по умолчанию ControlTemplate , чтобы предоставить элементу управления уникальный внешний вид. Дополнительные сведения см. в статье "Что такое стили и шаблоны?", а также как создать шаблон для элемента управления.

Свойство контента

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

Комплектующие

Элемент ListView управления не определяет именованные части шаблона.

При создании ControlTemplate для ListView ваш шаблон может содержать ItemsPresenter внутри ScrollViewer. Отображает ItemsPresenter каждый элемент в ListViewэлементе управления; ScrollViewer включает прокрутку в элементе управления. ItemsPresenter не является прямым дочерним элементом ScrollViewer, необходимо указать имя для ItemsPresenter как ItemsPresenter.

Визуальные состояния

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

Имя VisualState Имя VisualStateGroup Description
Действительный ValidationStates Элемент управления действителен и не имеет ошибок проверки.
НедействительныйФокус ValidationStates Элемент управления имеет ошибку проверки и находится в фокусе клавиатуры.
НедействительныйНефокусированный ValidationStates Элемент управления имеет ошибку проверки, но не имеет фокуса клавиатуры.

В следующей ListViewItem таблице перечислены состояния элемента управления.

Имя VisualState Имя VisualStateGroup Description
Обычная CommonStates Состояние по умолчанию.
Disabled CommonStates Элемент управления отключен.
Наведение курсора CommonStates Указатель мыши находится на элементе управления.
Focused FocusStates Элемент управления имеет фокус клавиатуры.
Нецеленаправленных FocusStates Элемент управления не имеет фокуса клавиатуры.
Выбрано SelectionStates Элемент в данный момент выбран.
Не выбрано SelectionStates Элемент не выбран.
ВыбранныйНеактивный SelectionStates Элемент выбран, но не имеет фокуса клавиатуры.
Действительный ValidationStates Элемент управления действителен и не имеет ошибок проверки.
НедействительныйФокус ValidationStates Элемент управления имеет ошибку проверки и находится в фокусе клавиатуры.
НедействительныйНефокусированный ValidationStates Элемент управления имеет ошибку проверки, но не имеет фокуса клавиатуры.

Режимы просмотра

Чтобы указать режим представления для содержимого 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>

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

Режимы отображения для общего доступа

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

Привязка данных

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

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

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

GridViewColumn gvc1 = new GridViewColumn();
gvc1.DisplayMemberBinding = new Binding("FirstName");
gvc1.Header = "FirstName";
gvc1.Width = 100;
Dim gvc1 As 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 не определяется, так как это действие имеет приоритет над CellTemplate.

<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

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

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

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

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

Справочник по коду

На следующие объекты ссылаются в этой статье:

  • EmployeeInfoDataSource сбор данных. Если вы используете Visual Basic .NET, элемент Window объявляется немного иначе, чем это показано в примере кода:

    <Window x:Class="SDKSample.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Loaded="OnLoad"
            xmlns:ds="clr-namespace:SDKSample">
    
        <Window.Resources>
            <ObjectDataProvider x:Key="EmployeeInfoDataSource" ObjectType="{x:Type ds:myEmployees}" />
        </Window.Resources>
    
  • EmployeeInfo класс, который используется в качестве типа для EmployeeInfoDataSource сбора данных.

    public class EmployeeInfo
    {
        private string _firstName;
        private string _lastName;
        private string _employeeNumber;
    
        public string FirstName
        {
            get {return _firstName;}
            set {_firstName = value;}
        }
    
        public string LastName
        {
            get {return _lastName;}
            set {_lastName = value;}
        }
    
        public string EmployeeNumber
        {
            get {return _employeeNumber;}
            set {_employeeNumber = value;}
        }
    
        public EmployeeInfo(string firstname, string lastname, string empnumber)
        {
            _firstName = firstname;
            _lastName = lastname;
            _employeeNumber = empnumber;
        }
    }
    
    Public Class EmployeeInfo
        Private _firstName As String
        Private _lastName As String
        Private _employeeNumber As String
    
        Public Property FirstName() As String
            Get
                Return _firstName
            End Get
            Set(ByVal value As String)
                _firstName = value
            End Set
        End Property
    
        Public Property LastName() As String
            Get
                Return _lastName
            End Get
            Set(ByVal value As String)
                _lastName = value
            End Set
        End Property
    
        Public Property EmployeeNumber() As String
            Get
                Return _employeeNumber
            End Get
            Set(ByVal value As String)
                _employeeNumber = value
            End Set
        End Property
    
        Public Sub New(ByVal firstname As String, ByVal lastname As String, ByVal empnumber As String)
            _firstName = firstname
            _lastName = lastname
            _employeeNumber = empnumber
        End Sub
    End Class
    

См. также