WPF: MVVM sagt Nein zu Konvertern, aber ich brauche nette Enum-Werte

8

In der Modellstufe habe ich eine Aufzählung definiert:

%Vor%

Aus meiner Sicht habe ich ein Kombinationsfeld, das mit diesen Aufzählungswerten gefüllt ist:

%Vor%

Dies führt dazu, dass das Kombinationsfeld mit den Auswahlmöglichkeiten übereinstimmt, die genau mit den Werten übereinstimmen, die in der Aufzählung definiert sind. Obwohl das mein ursprüngliches Ziel war, möchte ich eine bessere Präsentation für den Benutzer, etwa so:

  • Kombinationsfeldauswahl:
    • Aktives Mitglied
    • Inaktives Mitglied
    • Mitarbeiter
    • Mitglied des Vorstands
    • Alumni

Auch wenn sich die Sprache in der Anwendung ändert, brauche ich die enum-Werte in dieser Sprache. Um dies anzugehen, kam mir als Erstes ein Konverter für MemberStatus enum-Werte in den Sinn. Ich fand diesen schönen Artikel zum Thema: Ссылка Aber MVVM-Muster sagt, dass es keine Notwendigkeit zu erstellen gibt sie fast überhaupt - und ich stimme dem zu. Diese Bestätigung funktioniert jedoch in diesem Beispiel nicht zu meinen Gunsten.

Wie soll es gemacht werden? Vielen Dank.

    
Boris 18.04.2011, 23:06
quelle

4 Antworten

3

Die Ansicht, dass MVVM Wertwandler überflüssig macht, scheint von Josh Smith zu stammen, der in seinem Blogbeitrag Die Philosophien von MVVM :

  

... eine ViewModel-Klasse ist im Wesentlichen ein   Wertwandler auf Steroiden, also   Rendern des IValueConverter   Schnittstelle für die meisten irrelevant   Bindungen.

Was ich daraus entnehme (und ich stimme ihm zu, was es wert ist), ist, dass das View-Modell für die gesamte Konvertierung von der Weltansicht des Modells zu den Views verantwortlich ist und den Konverter obsolet macht.

Ein Enum (ein sehr datenzentrischer Datentyp) im Model, das bis zur Benutzeroberfläche verfügbar ist, ist definitiv ein Geruch - wenn nur aus dem Grund, den Sie sehen, dem Benutzer weniger als ideale Informationen zu zeigen.

>

Fügen Sie eine Zuordnung von enum zu UI-Zeichenfolge in Ihrem Ansichtsmodell hinzu.

    
David Hall 18.04.2011, 23:18
quelle
3

Konverter sind nützlich für viel mehr als das Konvertieren von enum s. Konverter sind auch wiederverwendbar als eine einmalige viewmodel .

  • Ich möchte vielleicht ein bool in ein Brush umwandeln und ich kann die Parameter in der Ansicht angeben.

  • Oder vielleicht möchte ich ein string in DateTime und wieder alles via Datenbindung konvertieren. Vielleicht möchte ich alles in Großbuchstaben umwandeln. Dann gibt es meinen bevorzugten BoolToVisibilityConverter .

Ich würde es hassen, explizit direkten oder indirekten Code in meinem VM s zu verwenden, nur um einige Minderheiten glücklich zu machen. Die Sache, die ich behaupten würde, sie vergessen, ist, dass Konverter von Expression Blend leicht zugänglich sind.

Konverter sind ein wesentlicher Bestandteil von WPF und ergänzen Bindungen zwischen view und viewmodel .

Ich sehe keinen Grund, warum Sie sie nicht für enum s verwenden können.

    
MickyD 29.10.2014 01:38
quelle
2

MVVM ist nicht wirklich in Stein gemeißelt, welche Teile von WPF sind und nicht erlaubt sind. Konverter sind in Ordnung, wenn sie Ihr Ziel leicht erreichen. Ich würde sogar vorschlagen, einen Schritt weiter zu gehen und ein MarkupExtension zu machen, um die Enum-Werte und ihre Entsprechungen zu liefern. Sie könnten die Zeichenfolgen in DescriptionAttribute für jeden Aufzählungswert speichern.

    
user7116 18.04.2011 23:46
quelle
2

Ich stimme nicht zu, dass MVVM ValueConverters obsolet macht. Es gibt mehr als genug Szenarien, in denen die Implementierung eines ValueConverters sinnvoller ist, wenn die Konvertierung in der ViewModel-Klasse implementiert wird.

Sie könnten an der BookLibrary Beispielanwendung des WPF-Anwendungsframeworks (WAF) interessiert sein . Es zeigt, wie eine Enum in einer MVVM-Anwendung lokalisiert werden kann. Bitte sehen Sie sich die BookLibrary.Presentation / Converters / LanguageToStringConverter-Klasse an.

    
jbe 20.04.2011 20:42
quelle

Tags und Links