Есть два основных различия. Один из них заключается в том, что ConverterParameter не является Binding и не прослушивает изменения свойств, поэтому Binding не будет обновляться автоматически при изменении значения.
Другое отличие состоит в том, что ConverterParameter является входом для Convert и ConvertBack, в то время как все привязки в MultiBinding являются входами для Convert и выходами ConvertBack. Например, если вы конвертируете из DateTime в строку, то у ConverterParameter может быть строка формата, поскольку это влияет на преобразование в обоих направлениях:
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 };
}
}