1
使用Converter(IValueConverter)和傳入其他值作爲參數(ConverterParameter)與使用MultiConverter(IMultiValueConverter)並傳入多個轉換器值之間有什麼區別?WPF轉換器屬性與MultiConverter?
使用Converter(IValueConverter)和傳入其他值作爲參數(ConverterParameter)與使用MultiConverter(IMultiValueConverter)並傳入多個轉換器值之間有什麼區別?WPF轉換器屬性與MultiConverter?
有兩個主要的區別。一個是ConverterParameter不是綁定,並且不偵聽屬性更改,所以如果值更改,綁定不會自動刷新。
另一個區別是ConverterParameter是Convert和ConvertBack的輸入,而MultiBinding中的所有Bindings都是ConvertBack的輸出和輸出。例如,如果您從日期時間轉換爲字符串,你可能有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 };
}
}