Lies in den Artikel rein und unten bekommst Du ein unschlagbares Angebot!
Wenn Sie WPF-Anwendungen erstellen wollen, wollen Sie die Daten der Anwendung in entsprechenden Fenstern darstellen. Ein Weg zu diesem Ziel ist das Bereitstellen der Daten in Listenform, also etwa als Collection oder Dictionary. Dieser Artikel zeigt, welche Schritte nötig sind, um eine Liste von Objekten auf Basis einer einfachen Klasse zu erstellen und seine Daten in geeigneten Listen-Steuerelementen eines WPF-Fensters anzuzeigen.
Im Beitrag WPF-Datenbindung: Einfache Objekte haben wir uns angesehen, wie Sie ein einfaches Objekt wie einen Kunden mit Eigenschaften wie Vorname, Nachname und Geburtsdatum in den Textfeldern eines WPF-Fensters anzeigen. Außerdem haben Sie dort erfahren, wie Sie die Daten in beiden Richtungen synchron halten können.
Nun wollen wir ein Listenobjekt wie beispielsweise eine Col-lection mit mehreren Kunde-Objekten füllen und diese samt ausgewählter Eigenschaften in verschiedenen Listen-Steuerelementen von WPF anzeigen – zum Beispiel im DataGrid, in der ComboBox, in der ListBox oder in der ListView. Welche Steuerelemente für die Darstellung einer Auflistung infrage kommen, hängt übrigens allein davon ab, ob diese von der Klasse ItemsControl abgeleitet sind. Was die Listen-Objekte angeht, deren Inhalt wir im Listen-Steuerelement abbilden wollen, so müssen diese lediglich die IEnumerable-Schnittstelle implementieren.
Ob ein Steuerelement die Klasse ItemsControl als Basistyp verwendet, können Sie beispielsweise im Objektkatalog nachlesen. Suchen Sie dort einfach nach dem gewünschten Steuerelement und schauen sich im linken Bereich die Basistypen des Steuerelements an. In Bild 1 finden Sie beispielsweise ItemsControl als Basistyp für das ComboBox-Steuerelement vor.
Bild 1: Prüfen, ob ein Steuerelement zur Darstellung von Listen geeignet ist
Der Objektkatalog hilft auch dabei, die als Datenquelle für ein Listen-Steuerelement infrage kommenden Klassen zu identifizieren. In Bild 2 etwa erkennen wir, dass das Collection-Objekt die Schnittstelle IEnumerable implementiert und somit als Datenquelle taugt.
Bild 2: Untersuchen einer Klasse auf Listen-Fähigkeit
Liste mit Kunden füllen
Schauen wir uns zunächst an, wie wir ein Listen-Objekt mit einigen verschiedenen Kunde-Objekten füllen. Da wir in diesem Fall wissen, dass wir immer den gleichen Objekttyp zum Listen-Objekt hinzufügen möchten, verwenden wir nicht die üblicherweise verwendeten Listen-Typen wie Collection oder ArrayList. Diese haben nämlich den Nachteil, dass sie beliebige Objekte aufnehmen können und dadurch beim Zugriff immer eine Typkonvertierung nötig ist.
Im Gegensatz dazu gibt es die typsicheren generischen Auflistungsklassen, bei denen man direkt bei der Deklaration angibt, welchen Typ die aufzunehmenden Elemente haben. Dieser wird dabei in spitzen Klammern hinter dem Schlüsselwort für die zu verwendende Auflistungsklasse angegeben. In unserem Beispiel wollen wir eine Methode namens GetKunden verwenden, um eine generische Auflistungsklasse des Typs List mit Elementen des Typs Kunde zu füllen und zurückzugeben.
Um die generische Klasse List zu verwenden, benötigen wir die Klasse System.Collections.Generic, die wir mit folgender Anweisung bereitstellen:
using System.Collections.Generic;
Die Methode GetKunden finden Sie in Listing 1. Nach dem Deklarieren und Initialisieren des List-Objekts kunden fügt die Methode mit der Add-Methode nacheinander drei neue Objekte des Typs Kunde hinzu. Die Definition der Klasse Kunde entnehmen Sie dem Beispielprojekt (siehe Kunde.cs), eine Beschreibung dieser Klasse liefert der Artikel WPF-Datenbindung: Einfache Objekte.
private List<Kunde> GetKunden() { List<Kunde> kunden = new List<Kunde>(); kunden.Add(new Kunde { Vorname = "André", Nachname = "Minhorst", Geburtsdatum = new DateTime(1971, 1, 23) }); kunden.Add(new Kunde { Vorname = "Klaus", Nachname = "Müller", Geburtsdatum = new DateTime(1981, 2, 3) }); kunden.Add(new Kunde { Vorname = "Barbara", Nachname = "Schmitz", Geburtsdatum = new DateTime(1976, 3, 4) }); return kunden; }
Listing 1: Füllen einer generischen Liste mit Kunde-Objekten
Die Methode GetKunden testen wir mit einer kleinen Methode, die durch die Schaltfläche btnListenelementeAusgeben unseres Beispielfensters ListeBinden.xaml ausgelöst wird (Code siehe Listing 2). Die Methode durchläuft die Kunde-Objekte der mit GetKunden gelieferten generischen Liste in einer foreach-Schleife und stellt damit eine Zeichenkette zusammen, welche Vorname, Nachname und Geburtsdatum der Kunden enthält.
private void btnListenelementeAusgeben_Click(object sender, RoutedEventArgs e) { List<Kunde> kunden = GetKunden(); string strKunden = ""; foreach(Kunde kunde in kunden) { strKunden += "\n" + kunde.Vorname + " " + kunde.Nachname + " " + kunde.Geburtsdatum.ToShortDateString(); } MessageBox.Show("Kunden:" + strKunden); }
Listing 2: Testen der Methode GetKunden
Die Zeichenkette gibt die Methode dann per MessageBox auf der Benutzeroberfläche aus (siehe Bild 3).
Bild 3: Ausgabe der Daten einer Klasse