Dela via


Översikt över ListView

Det ListView kontrollen tillhandahåller infrastrukturen för att visa en uppsättning dataobjekt med en annan layout eller vy. En användare kanske till exempel vill visa dataobjekt i en tabell och även sortera dess kolumner.

Anmärkning

De typerna som refereras i den här artikeln är tillgängliga i avsnittet Code referens.

Vad är en ListView?

ListView härleds från ListBox. Objekten är vanligtvis medlemmar i en datainsamling och representeras som ListViewItem objekt. En ListViewItem är en ContentControl och kan bara innehålla ett enda barnelement. Det underordnade elementet kan dock vara vilket visuellt element som helst.

Definiera ett visningsläge för en ListView

Om du vill ange ett visningsläge för innehållet i en ListView kontroll anger du egenskapen View. Ett visningsläge som WINDOWS Presentation Foundation (WPF) tillhandahåller är GridView, som visar en samling dataobjekt i en tabell som har anpassningsbara kolumner.

I följande exempel visas hur du definierar en GridView för en ListView kontroll som visar information om anställda.


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

Följande bild visar hur data visas i föregående exempel.

Skärmbild som visar en ListView med GridView-utdata.

Du kan skapa ett anpassat vyläge genom att definiera en klass som ärver från klassen ViewBase. Klassen ViewBase tillhandahåller den infrastruktur som du behöver för att skapa en anpassad vy. Mer information om hur du skapar en anpassad vy finns i Skapa ett anpassat visningsläge för en ListView-.

Binda data till en ListView

Använd egenskaperna Items och ItemsSource för att ange objekt för en ListView kontroll. I följande exempel anges egenskapen ItemsSource till en datainsamling med namnet EmployeeInfoDataSource.

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

I en GridViewbinder GridViewColumn objekt till angivna datafält. I följande exempel binder ett GridViewColumn-objekt till ett datafält genom att ange en Binding för egenskapen 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"/>

Du kan också ange en Binding som en del av en DataTemplate definition som du använder för att formatera cellerna i en kolumn. I följande exempel sätter DataTemplate, identifierad med en ResourceKey, Binding för en GridViewColumn. Observera att det här exemplet inte definierar DisplayMemberBinding eftersom det har företräde framför 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}"/>

Formatera en ListView som implementerar en GridView

Kontrollen ListView innehåller ListViewItem objekt som representerar de dataobjekt som visas. Du kan använda följande egenskaper för att definiera innehållet och formatet för dataobjekt:

Om du vill undvika justeringsproblem mellan celler i en GridViewska du inte använda ItemContainerStyle för att ange egenskaper eller lägga till innehåll som påverkar bredden på ett objekt i en ListView. Ett justeringsproblem kan till exempel uppstå när du anger egenskapen Margin i ItemContainerStyle. Om du vill ange egenskaper eller definiera innehåll som påverkar bredden på objekt i en GridViewanvänder du egenskaperna för klassen GridView och dess relaterade klasser, till exempel GridViewColumn.

Mer information om hur du använder GridView och dess stödklasser finns i GridView-översikt.

Om du definierar en ItemContainerStyle för en ListView-kontroll och även definierar en ItemTemplatemåste du inkludera en ContentPresenter i formatet för att ItemTemplate ska fungera korrekt.

Använd inte egenskaperna HorizontalContentAlignment och VerticalContentAlignment för det ListView-innehåll som visas av en GridView. Om du vill ange justering av innehåll i en kolumn i en GridViewdefinierar du en CellTemplate.

Dela samma vyläge

Två ListView kontroller kan inte dela samma visningsläge samtidigt. Om du försöker använda samma visningsläge med mer än en ListView kontroll uppstår ett undantag.

Om du vill ange ett visningsläge som kan användas samtidigt av fler än en ListViewanvänder du mallar eller formatmallar.

Skapa ett anpassat vyläge

Anpassade vyer som GridView härleds från den ViewBase abstrakta klassen, som tillhandahåller verktygen för att visa dataobjekt som representeras som ListViewItem objekt.

Kodreferens

Följande objekt refereras till i den här artikeln:

  • EmployeeInfoDataSource datainsamling. Om du använder Visual Basic .NET deklareras Window-elementet något annorlunda än det du ser i exempelkoden:

    <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-klass, som används som typ för EmployeeInfoDataSource datainsamling.

    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
    

Se även