Windows Presentation Foundation 26.02.2021, 09:05 Uhr

WPF: Enumerator für ListBox und ComboBox

Der professionelle Softwareentwickler #realJSOP hat auf CodeProject eine Anleitung inklusive Sourcen veröffentlicht, wie man Enumeratoren in WPF-ListBoxen beziehungsweise ComboBoxen integriert.
(Quelle: CodeProject, #realJSOP)
In seinem Artikel beschreibt #realJSOP eine Methode zum Erstellen einer beobachtbaren Sammlung von Aufzählungswerten zur Verwendung in einer WPF-Anwendung, die inzwischen so weit ausgebaut wurde, dass man Listensteuerelemente erstellen kann, welche die Auswahl von Aufzählungswerten erlauben. Ursprünglich bestand seine Idee darin, Steuerelemente mit Unterstützung für jeden der Systemaufzähler in C# bereitzustellen. Er meint, dass das sicherlich ausreichend gewesen wäre, aber irgendwie auch nur ein "halber Schritt" auf dem Weg zur tatsächlichen Nützlichkeit. Also hat er inzwischen auch die Unterstützung für lokal definierte Enumaratoren hinzugefügt.
Da Enumeratoren im Wesentlichen, wie #realJSOP sagt, One-Trick-Ponys sind, bei denen die Anzahl der nützlichen Eigenschaften genau eine ist (der Name des Enumerators), war es sinnvoll, eine ListBox und eine ComboBox zu erstellen und die ListView zu ignorieren.
Für System-Enumeratoren geben Sie einfach den Namen des Enum-Typs an. Das Steuerelement erstellt und bindet die resultierende Aufzählungssammlung an das Steuerelement, ohne dass Sie dies im XAML-Code tun müssen. Der folgende Ausschnitt ist das Minimum an Code, das Sie schreiben müssen, um eine ListBox (oder ComboBox) anzuzeigen, die die Wochentage enthält.
<ctrls:EnumListBox x:Name="lbWeekDay" EnumTypeName="System.DayOfWeek" />
Wenn ein Enumerator Flags repräsentiert (dekoriert mit dem Attribut [Flags]), wird die ListBox automatisch zu einer Multi-Selection-ListBox, es sei denn, Sie legen fest, dass sie das nicht soll, indem Sie die Eigenschaft AutoSelectionMode auf false setzen (Standardwert ist true):
<ctrls:EnumListBox x:Name="lbWeekDay" EnumTypeName="System.DayOfWeek" AutoSelectMode="false" />
Sie können optional den Ordinalwert des Aufzählers mit dem Namen anzeigen, indem Sie die Eigenschaft ShowOrdinalWithName auf true setzen (Standardwert ist false).
<ctrls:EnumListBox x:Name="lbWeekDay" EnumTypeName="System.DayOfWeek" ShowOrdinalWithName="true" />
Wie seine Lösung funktioniert, inklusive einem Link zu den Sourcen finden Sie im Originalartikel auf CodeProject.


Das könnte Sie auch interessieren