Share via


ListView 概觀

控制項 ListView 會提供基礎結構,以使用不同的版面配置或檢視,在 中顯示一組資料項目。 例如,使用者可能會想要以表格顯示資料項目,還要排序其資料行。

注意

本文中所參考的類型可在程式 代碼參考 一節中使用。

什麼是 ListView?

ListView 是衍生自 ListBox。 一般而言,其專案是資料收集的成員,並以 物件表示 ListViewItemListViewItem是 , 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>

下圖顯示上一個範例的資料顯示方式。

Screenshot that shows a ListView with GridView output.

您可以定義繼承自 類別的 ViewBase 類別,以建立自訂檢視模式。 類別 ViewBase 提供建立自訂檢視所需的基礎結構。 如需有關如何建立自訂檢視的詳細資訊,請參閱建立 ListView 的自訂檢視模式

將資料繫結至 ListView

Items使用 和 ItemsSource 屬性來指定控制項的專案 ListView 。 下列範例會將 ItemsSource 屬性設定為名為 EmployeeInfoDataSource 的資料收集。

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

在 中 GridViewGridViewColumn 物件會系結至指定的資料欄位。 下列範例會 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 部分,用來設定資料行中儲存格的樣式。 在下列範例中, DataTemplateResourceKey 設定 BindingGridViewColumn 來識別 。 請注意,此範例不會定義 , 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 物件,代表所顯示的資料項目。 您可以使用下列屬性來定義資料項目的內容和樣式:

若要避免 中 GridView 儲存格之間的對齊問題,請勿使用 ItemContainerStyle 來設定屬性或加入會影響 中 ListView 專案寬度的內容。 例如,當您在 中 ItemContainerStyle 設定 Margin 屬性時,可能會發生對齊問題。 若要指定屬性或定義會影響 中 GridView 專案寬度的內容,請使用 GridView 類別的屬性及其相關類別,例如 GridViewColumn

如需如何使用 GridView 及其支援類別的詳細資訊,請參閱 GridView 概觀

如果您定義 ItemContainerStyle 控制項的 ListView ,也定義 ItemTemplate ,則必須在 ContentPresenter 樣式中包含 ,才能 ItemTemplate 正確運作。

請勿將 HorizontalContentAlignmentVerticalContentAlignment 屬性用於 ListViewGridView 顯示的內容。 若要在 的資料行中 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
    

另請參閱