ListView 概觀
控制項 ListView 會提供基礎結構,以使用不同的版面配置或檢視,在 中顯示一組資料項目。 例如,使用者可能會想要以表格顯示資料項目,還要排序其資料行。
注意
本文中所參考的類型可在程式 代碼參考 一節中使用。
什麼是 ListView?
ListView 是衍生自 ListBox。 一般而言,其專案是資料收集的成員,並以 物件表示 ListViewItem 。 ListViewItem是 , ContentControl 而且只能包含單一子專案。 不過,該子元素可以是任何視覺元素。
定義 ListView 的檢視模式
若要指定控制項內容的 ListView 檢視模式,您可以設定 View 屬性。 Windows Presentation Foundation (WPF) 提供的其中一個檢視模式是 GridView ,它會在具有可自訂資料行的資料表中顯示資料項目集合。
下列範例示範如何為 ListView 顯示員工資訊的控制項定義 GridView 。
<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
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}"/>
為實作 GridView 的 ListView 設定樣式
控制項 ListView 包含 ListViewItem 物件,代表所顯示的資料項目。 您可以使用下列屬性來定義資料項目的內容和樣式:
在 控制項上 ListView ,使用 ItemTemplate 、 ItemTemplateSelector 和 ItemContainerStyle 屬性。
在 控制項上 ListViewItem ,使用 ContentTemplate 和 ContentTemplateSelector 屬性。
若要避免 中 GridView 儲存格之間的對齊問題,請勿使用 ItemContainerStyle 來設定屬性或加入會影響 中 ListView 專案寬度的內容。 例如,當您在 中 ItemContainerStyle 設定 Margin 屬性時,可能會發生對齊問題。 若要指定屬性或定義會影響 中 GridView 專案寬度的內容,請使用 GridView 類別的屬性及其相關類別,例如 GridViewColumn 。
如需如何使用 GridView 及其支援類別的詳細資訊,請參閱 GridView 概觀 。
如果您定義 ItemContainerStyle 控制項的 ListView ,也定義 ItemTemplate ,則必須在 ContentPresenter 樣式中包含 ,才能 ItemTemplate 正確運作。
請勿將 HorizontalContentAlignment 和 VerticalContentAlignment 屬性用於 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
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應