2

マルチバインディング内のいずれかのバインディングが失敗した場合にフォールバック値を指定する方法を探しています。

バインディングが成功した場合 (つまり、A と B が有効なパス) は次のとおりです。

<MultiBinding Converter="{local:MultiConverter}">
    <Binding Path="A"/>
    <Binding Path="B"/>
</MultiBinding>

ここでは、失敗した場合です(「B」へのパスが壊れています)

<MultiBinding Converter="{local:MultiConverter}">
    <Binding Path="A"/>
    <Binding Path="Bb"/>
</MultiBinding>

コンバーターの値 [1] の {DependencyProperty.UnsetValue} の値を渡します。私は次のようなことができることを望んでいました:

<MultiBinding Converter="{local:MultiConverter}" FallbackValue="Egg">
    <Binding Path="A"/>
    <Binding Path="Bb"/>
</MultiBinding>

残念ながら、コンバーターはまだ設定されていない値で呼び出されます。

私はあなたが次のことができることを知っていますが

<MultiBinding Converter="{local:MultiConverter}">
    <Binding Path="A"/>
    <Binding Path="Bb" FallbackValue="Egg"/>
</MultiBinding>

それは私が欲しいものではありません。サブバインディングのいずれかが失敗した場合、マルチバインディング全体のフォールバックを X に指定したいと考えています。コンポーネントごとにフォールバックを指定する必要はありません。

現在、私は次のように頼っています...しかし、コンバーターではなく、マルチバインディングでフォールバックを指定したいと思います。

public class MultiConverter : MarkupExtension, IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        if (values.Any(e => e == DependencyProperty.UnsetValue))
        {
            return "failed!";
        }
        return values[0].ToString() + values[1].ToString();
    }

    public object[] ConvertBack(object values, Type[] targetType, object parameter, CultureInfo culture)
    {
        return null;
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return this;
    }
}
4

1 に答える 1