Ü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.
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:
Verwenden Sie für das Steuerelement ListView die Eigenschaften ItemTemplate, ItemTemplateSelector und ItemContainerStyle.
Verwenden Sie für das Steuerelement ListViewItem die Eigenschaften ContentTemplate und ContentTemplateSelector.
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 dasWindow
-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 dieEmployeeInfoDataSource
-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
.NET Desktop feedback