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;
}
}
但這仍然意味着我必須檢查MultiConverter中未設置的值。這不是一個大問題,因爲我可以將該代碼放在所有轉換器的通用基類中,但似乎已經完成了一些工作,而且我只是錯誤地使用了它。 – pastillman
@pastillman是的,你確實需要在轉換器中檢查它,因爲你在「全局」檢查所有傳入的值[i]'。否則,正如你所提到的,你可以在每個綁定的基礎上做到這一點,或者如果你不想傳遞無效綁定的話,可以使用'PriorityBinding'。讓Converter返回null是完全有效的,因爲它也有助於本地化你直接從xaml引用字符串的地方。 – Viv