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.
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:
W kontrolce ListView użyj ItemTemplatewłaściwości , ItemTemplateSelectori ItemContainerStyle .
W kontrolce ListViewItem użyj ContentTemplate właściwości i ContentTemplateSelector .
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 zbieraniaEmployeeInfoDataSource
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ż
.NET Desktop feedback