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

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

Примечание.

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

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

ФабрикаListView наследуется от класса 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>

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

Screenshot that shows a ListView with GridView output.

Вы можете создать пользовательский режим представления, определив класс, наследуемый от класса ViewBase. Класс ViewBase предоставляет инфраструктуру, необходимую для создания пользовательского представления. Дополнительные сведения о создании пользовательского представления см. в разделе Создание пользовательского режима представления для 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 наборами ResourceKeyBinding для 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, который реализует GridView

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

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

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

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

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

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

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

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

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

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

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

В этой статье используются ссылки на следующие объекты:

  • Коллекция данных 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
    

См. также