Ist es möglich einen generischen Int-to-Enum Konverter zu erstellen?

8

Ich würde gerne sagen können

%Vor%

und um es als True auflösen zu lassen, wenn der Wert int gleich (int)MyEnum.Value

ist

Ich weiß, dass ich eine Converter erstellen könnte, die (MyEnum)intValue zurückgibt, aber dann müsste ich einen Konverter für jeden Enum-Typ erstellen, den ich in meinen DataTriggers verwende.

Gibt es eine allgemeine Möglichkeit, einen Konverter zu erstellen, der mir diese Art von Funktionalität bietet?

    
Rachel 18.08.2011, 16:00
quelle

5 Antworten

4

Ich denke, ich habe es herausgefunden

Ich musste nur meine ConverterParameter anstelle der Value gleich der Enum setzen, nach der ich suche, und nach True / False auswerten

%Vor%

Konverter

%Vor%     
Rachel 18.08.2011, 16:15
quelle
6

Es ist möglich, einen Konverter zwischen den Enumerationswerten und den zugrunde liegenden Integraltypen auf wiederverwendbare Weise zu erstellen - das heißt, Sie müssen keinen neuen Konverter für jede Enum-Art definieren. Es sind genug Informationen für Convert und ConvertBack vorhanden.

%Vor%

Wenn dieser Konverter aufgerufen wird, wird der Wert des Werts zwischen dem Wert von int / enum basierend auf den Werten value und targetType umgedreht. Es gibt keine fest codierten Aufzählungstypen.

    
Drew Noakes 09.11.2015 14:21
quelle
3

Sie könnten auch andersherum gehen und die Enumeration mit einer benutzerdefinierten Markup-Erweiterung in int für den Wert konvertieren.

Beispiel

%Vor%

EnumToIntExtension

%Vor%     
Fredrik Hedblad 18.08.2011 17:52
quelle
1

Wir wollten das auch in der Vergangenheit ein paar Mal machen, also haben wir verschiedene Erweiterungsmethoden (auf int, long usw.) entwickelt, um uns zu helfen. Der Kern von all diesen wird in einer einzigen statischen generischen TryAsEnum-Methode implementiert:

%Vor%

Diese Implementierung behandelt Enums mit jedem zugrunde liegenden Typ sowie mit dem Attribut [Flags] definierte Enums.

    
Chris Phillips 18.08.2011 18:04
quelle
0

Sie könnten einen ToString () für den int-Wert ausführen und diesen dann an die statische Enum.Parse- oder Enum.TryParse-Methode übergeben, die den gewünschten Enum-Typ verwendet und den entsprechenden Wert zurückgibt.

Dies ist jedoch keine perfekte Lösung, da es nicht mit Ganzzahlen arbeitet, die die binäre ODER-Verknüpfung mehrerer Aufzählungswerte darstellen

    
Robert Levy 18.08.2011 16:06
quelle

Tags und Links