Übersicht über ListView

Das Steuerelement ListView stellt die Infrastruktur zur Anzeige einer Reihe von Datenelementen bei der Verwendung verschiedener Layouts oder Ansichten bereit. Benutzer können damit z.B. die Datenelemente in einer Tabelle anzeigen und die Spalten sortieren.

Hinweis

Die Typen, auf die in diesem Artikel verwiesen wird, finden Sie im Abschnitt Codereferenz.

Was ist ein ListView-Steuerelement?

Die ListView wird von ListBox abgeleitet. Die darin enthaltenen Elemente sind in der Regel Member einer Datensammlung und werden als ListViewItem-Objekte dargestellt. Ein ListViewItem ist ein ContentControl und kann nur ein einziges untergeordnetes Element enthalten. Dieses untergeordnete Element kann jedoch ein beliebiges visuelles Element sein.

Definieren eines Anzeigemodus für ein ListView-Steuerelement

Um einen Anzeigemodus für den Inhalt eines ListView-Steuerelements anzugeben, legen Sie die Eigenschaft View fest. Ein Ansichtsmodus, den Windows Presentation Foundation (WPF) bietet, ist GridView, der eine Sammlung von Datenelementen in einer Tabelle mit anpassbaren Spalten anzeigt.

Das folgende Beispiel zeigt, wie Sie eine 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 aus dem vorherigen Beispiel angezeigt werden.

Screenshot that shows a ListView with GridView output.

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 dazu, wie Sie eine benutzerdefinierte Ansicht erstellen, finden Sie unter Erstellen eines benutzerdefinierten Ansichtsmodus für eine ListView.

Binden von Daten an ein ListView-Steuerelement

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

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

In einer GridView werden GridViewColumn-Objekte an die angegebenen Datenfelder gebunden. Im folgenden Beispiel wird ein GridViewColumn- Objekt an ein Datenfeld gebunden, indem eine Binding für die Eigenschaft DisplayMemberBinding 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 eine Binding auch als Teil einer DataTemplate-Definition angeben, die Sie zum Formatieren der Zellen in einer Spalte verwenden. Im folgenden Beispiel legt die über einen ResourceKey angegebene DataTemplate die Binding für eine GridViewColumn fest. 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 eines ListView-Steuerelements, das eine GridView implementiert

Das Steuerelement ListView enthält ListViewItem-Objekte, die die angezeigten Datenelemente repräsentieren. Mit den folgenden Eigenschaften können Sie den Inhalt und das Format von Datenelementen definieren:

Um Ausrichtungsprobleme zwischen Zellen in einer GridView zu vermeiden, verwenden Sie ItemContainerStyle nicht zum Festlegen von Eigenschaften oder zum Hinzufügen von Inhalten, die die Breite eines Elements in einer ListView beeinflussen. Ein Ausrichtungsproblem kann zum Beispiel auftreten, wenn Sie die Margin-Eigenschaft in ItemContainerStyle festlegen. Um Eigenschaften festzulegen oder Inhalte zu definieren, die sich auf die Breite der Elemente in einer GridView auswirken, verwenden Sie die Eigenschaften der Klasse GridView und der mit ihr verbundenen Klassen, wie z. B. GridViewColumn.

Weitere Informationen über die Verwendung von GridView und der unterstützenden Klassen finden Sie unter Übersicht über GridView.

Wenn Sie einen ItemContainerStyle für ein ListView-Steuerelement definieren und außerdem ein ItemTemplate definieren, müssen Sie einen ContentPresenter in den Stil einfügen, damit ItemTemplate korrekt funktioniert.

Verwenden Sie die Eigenschaften HorizontalContentAlignment und VerticalContentAlignment nicht für ListView-Inhalte, die mit GridView angezeigt werden. Um die Ausrichtung der Inhalte in einer GridView-Spalte anzugeben, definieren Sie ein CellTemplate.

Gemeinsame Nutzung des gleichen Anzeigemodus

Zwei ListView-Steuerelemente können nicht gleichzeitig denselben Ansichtsmodus verwenden. Wenn Sie versuchen, denselben Ansichtsmodus für mehr als ein ListView-Steuerelement zu verwenden, kommt es zu einer Ausnahme.

Um einen Ansichtsmodus festzulegen, der gleichzeitig von mehr als einer ListView verwendet werden kann, verwenden Sie Vorlagen oder Stile.

Erstellen eines benutzerdefinierten Ansichtsmodus

Benutzerdefinierte Ansichten wie GridView werden von der abstrakten Klasse ViewBase abgeleitet, die die Tools zum Anzeigen von Datenelementen bereitstellt, die als ListViewItem-Objekte dargestellt werden.

Codereferenz

In diesem Artikel wird auf die folgenden Objekte verwiesen:

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

    <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