Udostępnij przez


Lista widokowa

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

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

Zrzut ekranu przedstawiający ListView z wyjściem GridView, które wyświetla informacje o plikach.

Uwaga / Notatka

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

W poniższej tabeli wymieniono typowe zadania do pracy z kontrolką ListView:

Title Description
Sortowanie kolumny GridView po kliknięciu nagłówka Dowiedz się, jak sortować kolumnę GridView po kliknięciu nagłówka.
Tworzenie trybu widoku niestandardowego dla elementu ListView Dowiedz się, jak utworzyć tryb widoku niestandardowego dla elementu ListView.
Użyj szablonów do stylizacji ListView korzystającego z GridView Dowiedz się, jak używać szablonów do tworzenia stylu elementu ListView korzystającego z kontrolki GridView.
Utwórz styl dla przeciągniętego nagłówka kolumny GridView Dowiedz się, jak utworzyć styl dla przeciąganego nagłówka kolumny GridView.
Wyświetlanie zawartości obiektu ListView przy użyciu kontrolki GridView Dowiedz się, jak wyświetlać zawartość obiektu ListView przy użyciu kontrolki GridView.
Używanie wyzwalaczy do stylizowania wybranych elementów w elemencie ListView Dowiedz się, jak używać wyzwalaczy do stylizowania wybranych elementów w ListView.
Tworzenie elementu ListViewItems za pomocą kontrolki CheckBox Dowiedz się, jak utworzyć element ListViewItems za pomocą kontrolki CheckBox.
Wyświetlanie danych przy użyciu gridViewRowPresenter Dowiedz się, jak wyświetlać dane przy użyciu gridViewRowPresenter.
Grupuj elementy w ListView, który implementuje GridView Dowiedz się, jak grupować elementy w obiekcie ListView, który implementuje element GridView.
Stylizacja wiersza w ListView, kiedy używasz GridView Dowiedz się, jak stylować wiersz w widoku ListView, który implementuje kontrolkę GridView.
Zmiana poziomego wyrównania kolumny w widoku ListView Dowiedz się, jak zmienić wyrównanie w poziomie kolumny w widoku ListView.
Obsługa zdarzenia MouseDoubleClick dla każdego elementu w widoku ListView Dowiedz się, jak obsługiwać zdarzenie MouseDoubleClick dla każdego elementu w widoku ListView.

Style i szablony

Możesz zmodyfikować wartość domyślną ControlTemplate , aby nadać kontrolce unikatowy wygląd. Aby uzyskać więcej informacji, zobacz Co to są style i szablony? i Jak utworzyć szablon dla kontrolki.

Właściwość zawartości

Kontrolka ListView używa właściwości Items jako swojej właściwości zawartości. Ta właściwość umożliwia określenie elementów wyświetlanych w kontrolce.

Części

Kontrolka ListView nie definiuje żadnych nazwanych części szablonu.

Podczas tworzenia ControlTemplate dla ListView, Twój szablon może zawierać ItemsPresenter w ScrollViewer. Obiekt ItemsPresenter wyświetla każdy element w elemencie ListView; ScrollViewer włącza przewijanie w elemencie sterującym. Jeśli element ItemsPresenter nie jest bezpośrednim elementem podrzędnym elementu ScrollViewer, musisz podać elementowi ItemsPresenter nazwę ItemsPresenter.

Stany wizualne

W poniższej tabeli wymieniono stany wizualizacji dla kontrolki ListView .

Stan wizualny Nazwa grupy VisualStateGroup Description
Prawidłowe StanyWalidacji Kontrolka jest prawidłowa i nie ma błędów walidacji.
Nieprawidłowe skupienie StanyWalidacji Kontrolka ma błąd weryfikacji i ma fokus klawiatury.
NieprawidłoweNieaktywne StanyWalidacji Kontrolka ma błąd weryfikacji, ale nie ma fokusu klawiatury.

W poniższej tabeli wymieniono stany kontrolki ListViewItem .

Stan wizualny Nazwa grupy VisualStateGroup Description
Normal CommonStates Stan domyślny.
Disabled CommonStates Kontrolka jest wyłączona.
Mouseover CommonStates Wskaźnik myszy znajduje się nad kontrolką.
Focused FocusStates Kontrolka ma fokus klawiatury.
Nieostry FocusStates Kontrolka nie ma fokusu klawiatury.
Wybrano SelectionStates Element jest obecnie zaznaczony.
Niezaznaczone SelectionStates Element nie jest zaznaczony.
WybraneNieukierunkowane SelectionStates Element jest zaznaczony, ale nie ma fokusu klawiatury.
Prawidłowe StanyWalidacji Kontrolka jest prawidłowa i nie ma błędów walidacji.
Nieprawidłowe skupienie StanyWalidacji Kontrolka ma błąd weryfikacji i ma fokus klawiatury.
NieprawidłoweNieaktywne StanyWalidacji Kontrolka ma błąd weryfikacji, ale nie ma fokusu klawiatury.

Tryby wyświetlania

Aby określić tryb wyświetlania zawartości kontrolki ListView , ustaw 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>

Tryb widoku niestandardowego można utworzyć, definiując klasę dziedziczącą po ViewBase klasie. Klasa ViewBase udostępnia infrastrukturę potrzebną do utworzenia widoku niestandardowego. 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).

Udostępnianie trybów widoku

W tym samym czasie dwie ListView kontrolki nie mogą współużytkować 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.

Powiązanie danych

Użyj właściwości Items i ItemsSource , aby określić elementy dla kontrolki ListView . W poniższym przykładzie ustawiono właściwość 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 obiekt GridViewColumn z polem danych, określając Binding dla właściwości 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"/>

Możesz również określić Binding jako część definicji DataTemplate, której używasz do stylizacji komórek w kolumnie. W poniższym przykładzie DataTemplate zidentyfikowany z ResourceKey ustawia Binding dla 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}"/>

Stylizowanie kontrolek ListView

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 używaj ItemContainerStyle do ustawiania właściwości ani nie dodawaj zawartości, która wpływa na szerokość elementu w obiekcie ListView. Na przykład problem z wyrównaniem może wystąpić podczas ustawiania właściwości Margin w 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 ItemContainerStyle kontrolki, a także zdefiniujesz ListViewItemTemplate, musisz uwzględnić ContentPresenter w stylu, aby ItemTemplate działał poprawnie.

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

Odwołanie do kodu

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

  • EmployeeInfoDataSource zbieranie danych. Jeśli używasz Visual Basic .NET, element Window jest zadeklarowany nieco inaczej niż 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 także