Domanda

Qual è la differenza tra l'utilizzo di un convertitore (IValueConverter) e passando in altri valori come parametri (ConverterParameter) vs utilizzando un MultiConverter (IMultiValueConverter) e solo di passaggio in più valori Converter?

È stato utile?

Soluzione

Ci sono due differenze principali. Uno è che ConverterParameter non è un vincolante e non ascoltare i cambiamenti di proprietà, in modo che il rilegatura non verrà aggiornata automaticamente se il valore cambia.

L'altra differenza è che il ConverterParameter è un input sia Convertire e ConvertBack, mentre tutte le associazioni in un MultiBinding sono ingressi per convertire e uscite di ConvertBack. Ad esempio, se si sta convertendo da DateTime a stringa, si potrebbe avere la ConverterParameter essere una stringa di formato, dal momento che colpisce la conversione in entrambe le direzioni:

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

D'altra parte, se si desidera convertire da due doppie a una dimensione, allora si vorrebbe tornare due doppie durante la conversione di nuovo:

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 };
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top