Übersicht über ListView
Das ListView-Steuerelement stellt die Infrastruktur zum Anzeigen eines Satzes von Datenelementen in verschiedenen Layouts oder Ansichten bereit. Dies ist beispielsweise hilfreich, um Datenelemente in einer Tabelle anzuzeigen und Spalten zu sortieren.
Dieses Thema enthält folgende Abschnitte.
- Was ist eine ListView?
- Definieren eines Anzeigemodus für eine ListView
- Binden von Daten an eine ListView
- Formatieren einer ListView, die eine GridView implementiert
- Gemeinsames Verwenden des gleichen Anzeigemodus
- Erstellen eines benutzerdefinierten Ansichtsmodus
- Verwandte Abschnitte
Was ist eine ListView?
Das ListView-Steuerelement ist ein ItemsControl, das von ListBox abgeleitet wird. Normalerweise sind seine Elemente Teile einer Datensammlung und werden als ListViewItem-Objekte dargestellt. Ein ListViewItem ist ein ContentControl und kann nur ein einzelnes untergeordnetes Element enthalten. Das untergeordnete Element kann jedoch ein beliebiges visuelles Element sein.
Definieren eines Anzeigemodus für eine ListView
Um einen Anzeigemodus für den Inhalt eines ListView-Steuerelements anzugeben, legen Sie die View-Eigenschaft fest. Ein von Windows Presentation Foundation (WPF) bereitgestellter Ansichtsmodus ist GridView, in dem eine Sammlung von Datenelementen in einer Tabelle mit anpassbaren Spalten angezeigt wird.
Das folgende Beispiel zeigt, wie eine GridView für ein ListView-Steuerelement definiert wird, 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>
In der folgenden Abbildung ist dargestellt, wie die Daten des vorherigen Beispiels angezeigt werden.
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 benötigen, um eine benutzerdefinierte Ansicht zu erstellen. Weitere Informationen zum Erstellen einer benutzerdefinierten Ansicht finden Sie unter Gewusst wie: Erstellen eines benutzerdefinierten Ansichtsmodus für eine ListView.
Binden von Daten an eine ListView
Verwenden Sie die Items-Eigenschaft und die ItemsSource-Eigenschaft, um Elemente für ein ListView-Steuerelement anzugeben. Im folgenden Beispiel wird die ItemsSource-Eigenschaft auf die Datensammlung EmployeeInfoDataSource festgelegt.
<ListView ItemsSource="{Binding Source=
{StaticResource EmployeeInfoDataSource}}">
In einer GridView werden GridViewColumn-Objekte an angegebene Datenfelder gebunden. Im folgenden Beispiel wird ein GridViewColumn-Objekt an ein Datenfeld gebunden, indem eine Binding für die DisplayMemberBinding-Eigenschaft angegeben wird.
Dim gvc1 As New GridViewColumn()
gvc1.DisplayMemberBinding = New Binding("FirstName")
gvc1.Header = "FirstName"
gvc1.Width = 100
GridViewColumn gvc1 = 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 eine Binding als Teil einer DataTemplate-Definition angeben, die Sie verwenden, um die Zellen in einer Spalte zu formatieren. Im folgenden Beispiel setzt die DataTemplate, die mit einem ResourceKey identifiziert wird, die Binding für eine GridViewColumn. Beachten Sie, dass dieses Beispiel keine DisplayMemberBinding definiert, da ein solches Vorgehen die mit DataTemplate angegebene Bindung überschreibt.
<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. Mit den folgenden Eigenschaften können Sie den Inhalt und das Format von Datenelementen definieren:
Verwenden Sie für das ListView-Steuerelement die Eigenschaften ItemTemplate, ItemTemplateSelector und ItemContainerStyle.
Verwenden Sie für das ListViewItem-Steuerelement die ContentTemplate-Eigenschaft und die ContentTemplateSelector-Eigenschaft.
Um in einer GridView Ausrichtungsprobleme zwischen Zellen zu verhindern, sollten Sie keinen ItemContainerStyle verwenden, um Eigenschaften festzulegen oder Inhalte hinzuzufügen, die die Breite eines Elements in einer ListView beeinflussen. Beispielsweise kann ein Ausrichtungsproblem auftreten, wenn Sie die Margin-Eigenschaft im ItemContainerStyle festlegen. Um Eigenschaften anzugeben oder Inhalte zu definieren, die die Breite von Elementen in einer GridView beeinflussen, verwenden Sie die Eigenschaften der GridView-Klasse und verwandter Klassen wie GridViewColumn.
Weitere Informationen zur Verwendung von GridView und den unterstützenden Klassen finden Sie unter Übersicht über GridView.
Wenn Sie einen ItemContainerStyle für ein ListView-Steuerelement definieren und außerdem eine ItemTemplate definieren, müssen Sie im Stil einen ContentPresenter angeben, damit die ItemTemplate ordnungsgemäß funktioniert.
Verwenden Sie nicht die HorizontalContentAlignment-Eigenschaft und die VerticalContentAlignment-Eigenschaft für ListView-Inhalte, die mit einer GridView angezeigt werden. Um die Ausrichtung der Spalteninhalte einer GridView anzugeben, definieren Sie eine CellTemplate.
Gemeinsames Verwenden des gleichen Anzeigemodus
Der gleiche Anzeigemodus kann von zwei ListView-Steuerelementen nicht gleichzeitig gemeinsam verwendet werden. Wenn Sie den gleichen Anzeigemodus mit mehreren ListView-Steuerelementen verwenden, wird eine Ausnahme ausgelöst.
Verwenden Sie Vorlagen oder Stile, um einen Anzeigemodus anzugeben, der gleichzeitig von mehr als einer ListView verwendet werden kann. Ein Beispiel zum Definieren von Ansichten als Resources finden Sie unter Beispiel für eine ListView mit mehreren Ansichten.
Erstellen eines benutzerdefinierten Ansichtsmodus
Benutzerdefinierte Ansichten wie GridView werden von der abstrakten ViewBase-Klasse abgeleitet, die die Werkzeuge zum Anzeigen von Datenelementen bereitstellt, die als ListViewItem-Objekte dargestellt werden.
Ein Beispiel für einen benutzerdefinierten Ansichtsmodus finden Sie unter Beispiel für eine ListView mit mehreren Ansichten.
Siehe auch
Referenz
Konzepte
Optimieren der Leistung: Steuerelemente