Ich habe eine Situation, in der ich einen ganzzahligen Wert anzeigen muss, der an eine Eigenschaft in meinem Datenkontext gebunden ist, nachdem ich zwei separate Konvertierungen durchgeführt habe:
- Kehren Sie den Wert innerhalb eines Bereichs um (z. B. liegt der Bereich zwischen 1 und 100; der Wert im Datenkontext beträgt 90; der Benutzer sieht den Wert 10).
- Konvertieren Sie die Zahl in eine Zeichenfolge
Mir ist klar, dass ich beide Schritte ausführen kann, indem ich meinen eigenen Konverter erstelle (der IValueConverter implementiert). Ich habe jedoch bereits einen separaten Wertekonverter, der nur den ersten Schritt ausführt, und der zweite Schritt wird von Int32Converter abgedeckt.
Gibt es eine Möglichkeit, diese beiden vorhandenen Klassen in XAML zu verketten, ohne eine weitere Klasse erstellen zu müssen, die sie aggregiert?
Wenn ich dies klären muss, lassen Sie es mich bitte wissen. :) :)
Vielen Dank.
quelle
return this.Reverse<IValueConverter>().Aggregate(value, (current, converter) => converter.ConvertBack(current, targetType, parameter, culture));
Mit freundlicher Genehmigung von Josh Smith: Piping Value Converters (Link archive.org) genau das gefunden, wonach ich gesucht habe .
Er definiert eine
ValueConverterGroup
Klasse, deren Verwendung in XAML genau so ist, wie ich es mir erhofft hatte. Hier ist ein Beispiel:Tolles Zeug. Danke, Josh. :) :)
quelle
Die Implementierung des Silverlight-Projekts von Gareth Evans durch Town ist großartig, unterstützt jedoch keine unterschiedlichen Konverterparameter.
Ich habe es so geändert, dass Sie durch Kommas getrennte Parameter angeben können (es sei denn, Sie entkommen ihnen natürlich).
Konverter:
Hinweis: ConvertBack ist hier nicht implementiert. Die Vollversion finden Sie in meinem Gist .
Implementierung:
quelle
Ja, es gibt Möglichkeiten, Konverter zu verketten, aber es sieht nicht gut aus und Sie brauchen es hier nicht. Wenn Sie dies jemals brauchen, fragen Sie sich, ob dies wirklich der richtige Weg ist. Einfach funktioniert immer besser, auch wenn Sie Ihren eigenen Konverter schreiben müssen.
In Ihrem speziellen Fall müssen Sie lediglich einen konvertierten Wert in eine Zeichenfolge formatieren.
StringFormat
Eigentum an einemBinding
ist dein Freund hier.quelle
Hier ist eine kleine Erweiterung der Antwort von Town zur Unterstützung der Mehrfachbindung:
quelle