Freigeben über


ListView (Übersicht)

Das ListView Steuerelement stellt die Infrastruktur bereit, um eine Reihe von Datenelementen in einem anderen Layout oder einer anderen Ansicht anzuzeigen. Beispielsweise kann ein Benutzer Datenelemente in einer Tabelle anzeigen und seine Spalten sortieren.

Hinweis

Die typen, auf die in diesem Artikel verwiesen wird, sind im Codeverweisabschnitt verfügbar.

Was ist eine ListView?

Die ListView wird von ListBox abgeleitet. In der Regel sind deren Elemente Mitglieder einer Datensammlung und werden als ListViewItem Objekte dargestellt. A ListViewItem ist ein ContentControl und kann nur ein einzelnes untergeordnetes Element enthalten. Dieses untergeordnete Element kann jedoch ein beliebiges visuelles Element sein.

Definieren eines Ansichtsmodus für eine ListView

Um einen Ansichtsmodus für den Inhalt eines ListView Steuerelements anzugeben, legen Sie die View Eigenschaft fest. Ein Ansichtsmodus, den Windows Presentation Foundation (WPF) bereitstellt, besteht darin GridView, eine Sammlung von Datenelementen in einer Tabelle mit anpassbaren Spalten anzuzeigen.

Das folgende Beispiel zeigt, wie Sie ein GridView für ein ListView-Steuerelement definieren, das Mitarbeiterinformationen anzeigt.


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

Die folgende Abbildung zeigt, wie die Daten für das vorherige Beispiel angezeigt werden.

Screenshot, der ein ListView-Element mit GridView-Ausgabe zeigt.

Sie können einen benutzerdefinierten Ansichtsmodus erstellen, indem Sie eine Klasse definieren, die von der ViewBase Klasse erbt. Die ViewBase Klasse stellt die Infrastruktur bereit, die Sie zum Erstellen einer benutzerdefinierten Ansicht benötigen. Weitere Informationen zum Erstellen einer benutzerdefinierten Ansicht finden Sie unter Create a Custom View Mode for a ListView.

Binden von Daten an eine ListView-Liste

Verwenden Sie die Eigenschaften Items und ItemsSource, um Elemente für ein ListView Steuerelement anzugeben. Im folgenden Beispiel wird die Eigenschaft auf eine Datensammlung namens ItemsSource festgelegt.

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

In einem GridView binden GridViewColumn Objekte an angegebene Datenfelder. Im folgenden Beispiel wird ein Objekt an ein GridViewColumn Datenfeld gebunden, indem eine Binding für die DisplayMemberBinding Eigenschaft angegeben wird.

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

Sie können auch ein Binding als Teil einer DataTemplate Definition angeben, die Sie verwenden, um die Zellen in einer Spalte zu gestalten. Im folgenden Beispiel setzt die als DataTemplate identifizierte ResourceKey das Binding für ein GridViewColumn. Beachten Sie, dass in diesem Beispiel DisplayMemberBinding nicht definiert wird, da es Vorrang vor CellTemplate hat.

<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}"/>

Formatieren einer ListView, die eine GridView implementiert

Das ListView Steuerelement enthält ListViewItem Objekte, die die angezeigten Datenelemente darstellen. Sie können die folgenden Eigenschaften verwenden, um den Inhalt und den Stil von Datenelementen zu definieren:

Um Ausrichtungsprobleme zwischen Zellen in einem GridViewZu vermeiden, verwenden Sie nicht die ItemContainerStyle Zum Festlegen von Eigenschaften oder zum Hinzufügen von Inhalten, die sich auf die Breite eines Elements in einem ListViewElement auswirken. Ein Ausrichtungsproblem kann beispielsweise auftreten, wenn Sie die Margin Eigenschaft in der ItemContainerStyle festlegen. Wenn Sie Eigenschaften angeben oder Inhalte definieren möchten, die sich auf die Breite der Elemente in einem GridView auswirken, verwenden Sie die Eigenschaften der GridView Klasse und der zugehörigen Klassen, wie GridViewColumn.

Weitere Informationen zur Verwendung GridView und den unterstützenden Klassen finden Sie unter GridView Overview.

Wenn Sie ein ItemContainerStyle für ein Steuerelement ListView definieren und auch ein ItemTemplate definieren, müssen Sie ein ContentPresenter in den Stil einfügen, damit das ItemTemplate ordnungsgemäß funktioniert.

Verwenden Sie die Eigenschaften HorizontalContentAlignment und VerticalContentAlignment nicht für ListView-Inhalte, die von einem GridView angezeigt werden. Um die Ausrichtung des Inhalts in einer Spalte eines GridView festzulegen, definieren Sie ein CellTemplate.

Teilen des gleichen Anzeige-Modus

Zwei ListView Steuerelemente können denselben Ansichtsmodus nicht gleichzeitig verwenden. Wenn Sie versuchen, denselben Ansichtsmodus mit mehreren ListView Steuerelementen zu verwenden, tritt eine Ausnahme auf.

Um einen Ansichtsmodus anzugeben, der von mehreren ListView gleichzeitig verwendet werden kann, verwenden Sie Vorlagen oder Formatvorlagen.

Erstellen eines benutzerdefinierten Ansichtsmodus

Von der abstrakten Klasse GridView abgeleitete Ansichten wie ViewBase bieten die Werkzeuge zum Anzeigen von Datenobjekten, die als ListViewItem Objekte dargestellt werden.

Codeverweis

Auf die folgenden Objekte wird in diesem Artikel verwiesen:

  • EmployeeInfoDataSource Datensammlung. Wenn Sie Visual Basic .NET verwenden, wird das Window-Element etwas anders deklariert als im Beispielcode gezeigt.

    <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 klasse, die als Typ für die EmployeeInfoDataSource Datensammlung verwendet wird.

    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
    

Siehe auch