Конвертер WPF с свойством VS Multiconverter?
-
28-09-2019 - |
Вопрос
В чем разница между использованием преобразователя (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 };
}
}