Pregunta

¿Cuál es la diferencia entre usar un convertidor (IValueConverter) y que pasa en otros valores como parámetros (ConverterParameter) vs utilizando un multiconversor (IMultiValueConverter) y de paso en varios valores del convertidor?

¿Fue útil?

Solución

Hay dos diferencias principales. Una es que no es un ConverterParameter vinculante y no escuchar los cambios de propiedad, por lo que la unión no se actualizará automáticamente si cambia el valor.

La otra diferencia es que la ConverterParameter es una entrada a ambos Convertir y ConvertBack, mientras que todos los enlaces en un MultiBinding son entradas para convertir y salidas de ConvertBack. Por ejemplo, si va a convertir de DateTime de cadena, es posible que tenga la ConverterParameter ser una cadena de formato, ya que afecta a la conversión en ambas direcciones:

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

Por otro lado, si desea convertir de dos dobles a un tamaño, entonces usted podría querer volver dos dobles al convertir la espalda:

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 };
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top