1. ホーム
  2. wpf

[解決済み] XAMLで複数のバリューコンバータを連結する方法はありますか?

2022-06-16 19:17:53

質問

データコンテキストのプロパティにバインドされた整数値を、2つの別々の変換を経た後に表示する必要がある状況にあります。

  1. 範囲内の値を反転させる (例: 範囲は 1 ~ 100、データ テキストの値は 90、ユーザーには値 10 が表示される)
  2. 数値を文字列に変換する

IValueConverter を実装した)独自のコンバータを作成すれば、両方のステップを実行できることは分かっている。しかし、私はすでに最初のステップだけを行う別の値コンバータを持っており、2番目のステップは Int32Converter でカバーされています。

これら 2 つの既存のクラスを連結する方法はありますか。 を XAML で連鎖させる方法はありますか。 を集約するクラスを作成することなく、これら2つの既存のクラスを連鎖させる方法はありますか?

もし私がこのうちのどれかを明確にする必要があるなら、私に知らせてください :)

ありがとうございます。

どのように解決するのですか?

私は この方法 を使用しました。

以下は私の実装です。

public class ValueConverterGroup : List<IValueConverter>, IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return this.Aggregate(value, (current, converter) => converter.Convert(current, targetType, parameter, culture));
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}

これをXAMLで使用すると、次のようになります。

<c:ValueConverterGroup x:Key="InvertAndVisibilitate">
   <c:BooleanInverterConverter/>
   <c:BooleanToVisibilityConverter/>
</c:ValueConverterGroup>