Datenbindung Int-Eigenschaft an Enum in WPF

8

Unten ist ein vereinfachtes Beispiel für eine Klasse, die ich habe:

%Vor%

Ich habe auch eine Enum, die die IDs von DriverType auf aussagekräftige Namen abbildet:

%Vor%

Aber ich möchte dies in XAML an eine Combobox binden. Wegen der Typabweichung stimmt das leider nicht. Also muss ich in meinem ViewModel eine zweite Eigenschaft erstellen, um die zwei

zuzuordnen %Vor%

Dann binde ich an die neue Eigenschaft.

%Vor%

Nun, das funktioniert, aber fühlt sich sehr eklig an. Es verwendet SelectedDriverType als Konverter. Ich möchte vermeiden, dass die Eigenschaft des DTO einen anderen Typ hat. Gibt es andere, elegantere Lösungen?

Danke!

    
Killnine 20.12.2013, 15:42
quelle

3 Antworten

18

Sie können einen generischen Konverter sagen EnumConverter , der convert int to Enum hat, um ihn auf XAML anzuzeigen, und convert back from Enum to int , um ihn in Ihrer ViewModel-Klasse zu setzen.

Es funktioniert für jeden Enum-Typ. Sie müssen nur den Enumerationstyp in den Konverterparametern übergeben.

%Vor%

XAML-Verwendung:

%Vor%

local ist der Namespace, in dem Ihr DriverType deklariert ist.

    
Rohit Vats 20.12.2013, 19:07
quelle
4

Die akzeptierte Antwort erfordert, dass Sie den Enum-Typ als Konverterparameter für jede Bindung angeben.

Wenn Sie an eine enum-Eigenschaft gebunden sind, kann der Konverter den Enum-Typ aus der Eigenschaft targetType bestimmen, die ergonomischer und weniger fehleranfällig sein kann.

%Vor%

Dies funktioniert auch unabhängig vom zugrunde liegenden Enum-Typ ( int , short , byte ...).

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 in der Quelle, daher ist es ziemlich wiederverwendbar.

    
Drew Noakes 09.11.2015 14:18
quelle
3

Ein enum als int zu speichern ist in erster Linie eine schlechte Idee. Jedenfalls würde ich eine bidirektionale Proxy-Eigenschaft anstelle einer separaten Klasse verwenden:

%Vor%     
fejesjoco 20.12.2013 16:54
quelle

Tags und Links