2010-06-21 5 views
1

Converter (IValueConverter)를 사용하고 다른 값을 매개 변수 (ConverterParameter)와 비교하는 것과 MultiConverter (IMultiValueConverter)를 사용하고 여러 변환기 값을 전달하는 것의 차이점은 무엇입니까?속성 대 MultiConverter WPF 변환기?

답변

6

두 가지 주요 차이점이 있습니다. 하나는 ConverterParameter가 Binding이 아니며 속성 변경 내용을 수신하지 않기 때문에 값이 변경되면 Binding이 자동으로 새로 고쳐지지 않습니다.

다른 점은 ConverterParameter가 Convert와 ConvertBack 모두에 대한 입력이고, MultiBinding의 모든 바인딩이 ConvertBack의 입력이고 ConvertBack의 출력이라는 것입니다.

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); 
    } 
} 

한편 두에서 변환 할 경우 : 그 두 방향의 전환에 영향을 받기 때문에 예를 들어, 문자열로 날짜 시간으로 변환하는 경우, 당신은 ConverterParameter이 형식 문자열이 될 수도 있습니다 크기를 두 배로 늘리면 다시 변환 할 때 두 개의 double을 반환해야합니다.

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 }; 
    } 
}