2010-06-21 29 views
1

使用Converter(IValueConverter)和傳入其他值作爲參數(ConverterParameter)與使用MultiConverter(IMultiValueConverter)並傳入多個轉換器值之間有什麼區別?WPF轉換器屬性與MultiConverter?

回答

6

有兩個主要的區別。一個是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 }; 
    } 
}