【问题标题】:WPF Converter with Property vs MultiConverter?具有属性的WPF转换器与MultiConverter?
【发布时间】:2010-06-21 15:01:54
【问题描述】:

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

【问题讨论】:

    标签: wpf xaml ivalueconverter imultivalueconverter


    【解决方案1】:

    有两个主要区别。一是ConverterParameter不是Binding,不监听属性变化,所以当值发生变化时,Binding不会自动刷新。

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

    【讨论】:

      猜你喜欢
      • 2020-12-21
      • 2013-06-21
      • 2012-11-21
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-16
      相关资源
      最近更新 更多