如果多重绑定中的任何绑定失败,我正在寻找一种方法来指定后备值。
这是绑定成功的情况(即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>
它为转换器的 value[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;
}
}