Question

Quelle est la différence entre l'utilisation d'un convertisseur (IValueConverter) et passer dans d'autres valeurs comme paramètres (ConverterParameter) vs l'aide d'un MultiConverter (IMultiValueConverter) et juste passer dans plusieurs valeurs de conversion?

Était-ce utile?

La solution

Il existe deux différences principales. La première est que ConverterParameter est pas contraignant et ne pas écouter les changements de propriété, de sorte que la liaison ne se réactualise pas automatiquement si la valeur change.

L'autre différence est que le ConverterParameter est une entrée à la fois et Convertir ConvertBack, tandis que toutes les liaisons dans un MultiBinding sont des entrées pour convertir et sorties des ConvertBack. Par exemple, si vous convertissez de DateTime à chaîne, vous pourriez avoir le ConverterParameter être une chaîne de format, car cela affecte la conversion dans les deux sens:

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);
    }
}

Par contre, si vous voulez convertir deux doubles à une taille, alors vous voulez revenir deux doubles lors de la conversion de retour:

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 };
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top