ListView — Przegląd

Kontrolka ListView udostępnia infrastrukturę do wyświetlania zestawu elementów danych przy użyciu innego układu lub widoku. Na przykład użytkownik może chcieć wyświetlić elementy danych w tabeli, a także posortować kolumny.

Uwaga

Typy, do których odwołuje się ten artykuł, są dostępne w sekcji Dokumentacja kodu.

Co to jest obiekt ListView?

Element ListView pochodzi z klasy ListBox. Zazwyczaj jego elementy są elementami członkowskimi kolekcji danych i są reprezentowane jako ListViewItem obiekty. Element jest ListViewItem elementem ContentControl i może zawierać tylko jeden element podrzędny. Jednak ten element podrzędny może być dowolnym elementem wizualnym.

Definiowanie trybu widoku dla elementu ListView

Aby określić tryb wyświetlania zawartości kontrolki ListView , należy ustawić View właściwość . Jednym z trybów wyświetlania zapewnianych przez program Windows Presentation Foundation (WPF) jest GridView, który wyświetla kolekcję elementów danych w tabeli, która ma dostosowywalne kolumny.

W poniższym przykładzie pokazano, jak zdefiniować GridView kontrolkę służącą do wyświetlania ListView informacji o pracownikach.


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

Poniższa ilustracja przedstawia sposób wyświetlania danych dla poprzedniego przykładu.

Screenshot that shows a ListView with GridView output.

Tryb widoku niestandardowego można utworzyć, definiując klasę dziedziczą po ViewBase klasie. Klasa ViewBase udostępnia infrastrukturę, którą należy utworzyć w widoku niestandardowym. Aby uzyskać więcej informacji na temat tworzenia widoku niestandardowego, zobacz Create a Custom View Mode for a ListView (Tworzenie trybu widoku niestandardowego dla elementu ListView).

Wiązanie danych z kontrolką ListView

Użyj właściwości Items i ItemsSource , aby określić elementy dla kontrolki ListView . W poniższym przykładzie właściwość jest ustawiana ItemsSource na kolekcję danych o nazwie EmployeeInfoDataSource.

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

W obiekcie GridViewGridViewColumn obiekty są powiązane z określonymi polami danych. Poniższy przykład wiąże GridViewColumn obiekt z polem danych, określając właściwość DisplayMemberBinding .Binding

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

Możesz również określić Binding jako część definicji używanej DataTemplate do stylu komórek w kolumnie. W poniższym przykładzie DataTemplate zidentyfikowano element z zestawem ResourceKeyBinding dla elementu GridViewColumn. Należy pamiętać, że w tym przykładzie nie zdefiniowano obiektu , DisplayMemberBinding ponieważ ma to pierwszeństwo przed elementem 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}"/>

Stylowanie obiektu ListView, który implementuje kontrolkę GridView

Kontrolka ListView zawiera ListViewItem obiekty reprezentujące wyświetlane elementy danych. Aby zdefiniować zawartość i styl elementów danych, można użyć następujących właściwości:

Aby uniknąć problemów z wyrównaniem między komórkami w obiekcie GridView, nie należy ustawiać ItemContainerStyle właściwości ani dodawać zawartości, która ma wpływ na szerokość elementu w obiekcie ListView. Na przykład problem z wyrównaniem może wystąpić podczas ustawiania Margin właściwości w obiekcie ItemContainerStyle. Aby określić właściwości lub zdefiniować zawartość, która ma wpływ na szerokość elementów w obiekcie GridView, użyj właściwości GridView klasy i powiązanych klas, takich jak GridViewColumn.

Aby uzyskać więcej informacji na temat używania GridView i jej klas pomocniczych, zobacz GridView Overview (Omówienie kontrolki GridView).

Jeśli zdefiniujesz element dla ListView kontrolki, a także zdefiniuj ItemContainerStyleItemTemplateelement , musisz uwzględnić ContentPresenter element w stylu, aby ItemTemplate element działał poprawnie.

Nie używaj HorizontalContentAlignment właściwości i VerticalContentAlignment dla ListView zawartości wyświetlanej przez element GridView. Aby określić wyrównanie zawartości w kolumnie GridViewobiektu , zdefiniuj element CellTemplate.

Udostępnianie tego samego trybu widoku

W tym samym czasie dwie ListView kontrolki nie mogą współdzielić tego samego trybu widoku. Jeśli spróbujesz użyć tego samego trybu widoku z więcej niż jedną ListView kontrolką, wystąpi wyjątek.

Aby określić tryb wyświetlania, który może być używany jednocześnie przez więcej niż jeden ListViewelement , użyj szablonów lub stylów.

Tworzenie trybu widoku niestandardowego

Niestandardowe widoki, takie jak GridView , pochodzą z ViewBase klasy abstrakcyjnej, która udostępnia narzędzia do wyświetlania elementów danych reprezentowanych jako ListViewItem obiekty.

Dokumentacja kodu

W tym artykule odwołuje się do następujących obiektów:

  • EmployeeInfoDataSource zbieranie danych. Jeśli używasz platformy .NET w języku Visual Basic, Window element jest zadeklarowany nieco inaczej niż to, co widzisz w przykładowym kodzie:

    <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 klasa, która jest używana jako typ zbierania EmployeeInfoDataSource danych.

    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
    

Zobacz też