Вопрос

В чем разница между использованием преобразователя (Ivalueconverter) и прохождение других значений в качестве параметров (ConverterParameter) vs с использованием многократного (Imultivalueconverter) и просто прохождение в нескольких значениях преобразователя?

Это было полезно?

Решение

Есть два основных различия. Одним из них является то, что конвертерпараметр не является связыванием и не прослушивает изменения свойства, поэтому привязка не будет автоматически обновляться, если значение изменяется.

Другое отличие состоит в том, что преобразовательParameter является входом для преобразования, так и преобразования, в то время как все привязки в MultiBinding являются входами для преобразования и выводов преобразования. Например, если вы преобразуете из DateTime в String, у вас может быть конвертерпараметр является строкой формата, поскольку это влияет на преобразование в обоих направлениях:

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

С другой стороны, если вы хотите преобразовать из двух двойных в размере, то вы захотите вернуть два двойных привержении:

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 };
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top