In einer meiner jüngsten Anwendungen musste ich eine Drop-down-Liste mit dem Inhalt eines Aufzählungstyps füllen. Dies lässt sich relativ leicht bewerkstelligen. Dazu brauchen Sie lediglich die statische Methode GetValues auf der Enum-Klasse aufzurufen, eine Liste der Zeichenfolgen zu erstellen und die Auflistung an die Drop-down-Liste zu binden. Diese Lösung ist zwar einfach zu programmieren, jedoch weit davon entfernt, perfekt zu sein. Auf den zweiten – und genaueren – Blick jedoch müssen Sie erkennen, dass eine derartige Lösung so weit von der Perfektion entfernt ist, dass sie in einer praktischen Anwendung kaum nützlich ist. Kein Kunde würde es hinnehmen, eine Option in „KamelSchreibweise“ wie zum Beispiel AusstehendeBestellung auszuwählen. Stattdessen möchte der Kunde einen benutzerfreundlichen und lokalisierten Text sehen. Um dieses Ziel zu erreichen, können Sie nicht einfach eine direkte Bindung zwischen dem Steuerelement Drop-down-Liste und dem Aufzählungstyp einrichten. Meistens werden Sie also auf irgendein zwischengeschaltetes Datentransferobjekt zurückgreifen. Vor allem aber müssen Sie für jeden Aufzählungstyp, den Sie binden möchten, einen eigenen Datentransfertyp erzeugen und verwalten.
In einem meiner letzten Artikel habe ich erläutert, wie Sie durch Erweiterungsmethoden die Abstraktionsebene des Codes verbessern, mit dem Sie Aufzählungstypen an datengebundene Steuerelemente binden. Dieses Projekt werde ich nun verallgemeinern, damit es mit jedem beliebigen Aufzählungstyp funktioniert.
Wunschzettel
Zunächst legen wir eine Liste der Features an, die über die Klasse System.Enum zugänglich sein sollen. An erster Stelle steht dabei, dass die Klasse System.Enum in der Lage sein sollte, ihre Werte als bindungsfähige Auflistung verfügbar zu machen, bei der sich der Beschreibungstext durch Entwickler steuern und geeignet lokalisieren lässt. Zweitens brauchen wir eine schnelle Möglichkeit, um den aufgezählten Wert in seinen nativen Typ zu konvertieren. Meistens liegen die Werte eines Aufzählungstyps als reine Ganzzahlen vor. Allerdings können Sie nicht einfach einen Wert eines Aufzählungstyps an einer Stelle übergeben, wo eine Ganzzahl erwartet wird, und umgekehrt. Es ist also eine Typumwandlung erforderlich.