unsetvalue上的MultiBinding Fallback值

时间:2013-06-03 23:22:53

标签: wpf converter multibinding fallback

如果多绑定中的任何绑定失败,我正在寻找一种指定回退值的方法。

这是绑定成功的情况(即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>

这不是我想要的。如果任何子绑定失败,我想将整个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;
    }
}

1 个答案:

答案 0 :(得分:1)

也许使用TargetNullValue从转换器返回null而不是"failed!"

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

这样你就可以检查转换器,如果转换器返回null因为任何绑定错误,你的结果会选择TargetNullvalue