我正在寻找一种方法,在多绑定中的任何绑定失败时指定回退值。
下面是绑定成功的情况。e, 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>
传递一个值{DependencyProperty。为转换器的值[1]设置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;
}
}
也许使用TargetNullValue从转换器返回null
而不是"failed!"
<MultiBinding Converter="{local:MultiConverter}" TargetNullValue="Failed!">
<Binding Path="A"/>
<Binding Path="Bb" />
</MultiBinding>
这样您就可以在转换器中进行检查,如果转换器由于任何绑定错误而返回null
,您的结果将选择TargetNullvalue