Frage

Was ist der Unterschied eines Converter (IValueConverter) zwischen der Verwendung und Weitergabe in anderen Werten als Parameter (Converter) vs einen Multikonverter mit (IMultiValueConverter) und Weitergabe nur in mehreren Wandlerwerten?

War es hilfreich?

Lösung

Es gibt zwei wesentliche Unterschiede. Einer ist, dass Converter ist kein Binding und hört nicht für Eigenschaftsänderungen, so dass die Bindung nicht automatisch, wenn der Wert ändert aktualisieren.

Der andere Unterschied ist, dass der Converter ist ein Eingang sowohl Konvertieren und ConvertBack, während alle der Bindungen in einem Multibinding Eingänge zu konvertieren und Ausgänge von ConvertBack. Zum Beispiel, wenn Sie von Datetime-String konvertieren, haben Sie vielleicht den Converter ein Format-String sein, da dass die Umwandlung in beiden Richtungen wirken:

public class DateTimeConverter
    : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return ((DateTime)value).ToString((string)parameter, null);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return DateTime.ParseExact((string)value, (string)parameter, null);
    }
}

Auf der anderen Seite, wenn Sie aus zwei Doppelzimmern zu einer Größe konvertieren wollen, dann würden Sie zwei Doppelzimmer zurück, wenn wieder Umwandlung:

public class SizeConverter
    : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return new Size((double)values[0], (double)values[1]);
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        var size = (Size)value;
        return new object[] { size.Width, size.Height };
    }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top