6 Stimmen

WPF und MVVM: Ändern des Datenbindungskonverters zur Laufzeit

Ich bin mit WPF und das MVVM-Muster in meiner Benutzeroberfläche. In meinem ViewModel habe ich eine Liste mit Entfernungen in Millimetern, die ich in einer ListView anzeige, indem ich ListView.ItemsSource an die Liste binde. Ich möchte jedoch, dass die angezeigten Werte eine natürlichere Einheit verwenden - entweder Meter oder Fuß, je nach dem Status einer "metrischen" Checkbox.

Ich habe ein paar einfache Klassen geschrieben, MillimetresToMetresConverter und MillimetresToFeetConverter, die beide IValueConverter implementieren. Obwohl ich die Converter-Eigenschaft meiner Datenbindung auf das eine oder das andere festlegen kann, bin ich mir nicht sicher, wie ich zwischen diesen Konvertern wechseln kann, wenn sich der Zustand des Kontrollkästchens ändert.

Mein Plan war, ein Feld "IValueConverter lengthConverter" auf meinem ViewModel zu haben, die ich auf einen Konverter oder den anderen, dann in meinem XAML tun könnte ...="{Binding Converter={Binding Path=lengthConverter}}" - leider funktioniert dies nicht, da Converter keine Abhängigkeitseigenschaft ist.

Wie kann der von der Datenbindung verwendete Konverter zur Laufzeit geändert werden?

5voto

japf Punkte 6428

In den meisten Fällen, in denen die MVVM-Methodik verwendet wird, können Sie die Formatierungsaufgabe in den VM-Klassen erledigen. In Ihrem Fall könnten Sie der VM-Klasse eine Eigenschaft Format hinzufügen und auf der Grundlage des Werts der Eigenschaft Format eine gut formatierte Zeichenfolge zurückgeben.

Véase diese Diskussion für weitere Informationen.

0voto

Heinzi Punkte 157917

Wenn ich eine einfache Alternativlösung vorschlagen darf: Erstellen Sie eine kleine FormatMillimetresConverter in Ihrem ViewModel, dessen UseMetric ist an das Kontrollkästchen "metrisch" gebunden.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X