带有Property vs MultiConverter的WPF转换器?

时间:2010-06-21 15:01:54

标签: wpf xaml ivalueconverter imultivalueconverter

使用转换器(IValueConverter)和传入其他值作为参数(ConverterParameter)与使用MultiConverter(IMultiValueConverter)并传递多个转换器值之间有什么区别?

1 个答案:

答案 0 :(得分:6)

主要有两个不同之处。一个是ConverterParameter不是Binding并且不监听属性更改,因此如果值更改,Binding将不会自动刷新。

另一个区别是ConverterParameter是Convert和ConvertBack的输入,而MultiBinding中的所有Binding都是ConvertBack的Convert和输出的输入。例如,如果要从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 };
    }
}