質問

コンバーター(iValueConverter)の使用と、マルチコンバーター(ImultivalueConverter)を使用したパラメーター(ConverterParameter)と複数のコンバーター値を渡すだけのパラメーター(ConverterParameter)として他の値を渡すことの違いは何ですか?

役に立ちましたか?

解決

主に2つの違いがあります。 1つは、ConverterParameterはバインディングではなく、プロパティの変更を聞くことがないため、値が変更された場合、バインディングは自動的に更新されないことです。

もう1つの違いは、converterParameterが変換と変換の両方への入力であり、マルチバインディングのすべてのバインディングは、変換された変換と出力の入力であることです。たとえば、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);
    }
}

一方、2つのダブルからサイズに変換する場合は、戻ってから2つのダブルを返したいと思うでしょう。

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 };
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top