Ich frage, weil es nicht zu funktionieren scheint.Wie funktioniert FallbackValue mit einem MultiBinding?
Angenommen wir zu dem folgenden Objekt sind verbindlich:
public class HurrDurr
{
public string Hurr {get{return null;}}
public string Durr {get{return null;}}
}
Nun, es scheint, dass, wenn wir würden gezeigt ein Multibinding gegen das der Fehlerwert verwendet, nicht wahr?
<TextBlock>
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} to the {1}"
FallbackValue="Not set! It works as expected!)">
<Binding Path="Hurr"/>
<Binding Path="Durr"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
aber das Ergebnis ist in der Tat, "zum". zwingt auch die Bindungen DependencyProperty.UnsetValue
zurückzukehren funktioniert nicht:
<TextBlock xmnlns:base="clr-namespace:System.Windows;assembly=WindowsBase">
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} to the {1}"
FallbackValue="Not set! It works as expected!)">
<Binding Path="Hurr"
FallbackValue="{x:Static base:DependencyProperty.UnsetValue}" />
<Binding Path="Durr"
FallbackValue="{x:Static base:DependencyProperty.UnsetValue}" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
die gleiche Versuchte mit TargetNullValue, die auch um eine Büste den ganzen Weg war.
So scheint es, dass Multibinding werden nieFallbackValue verwenden. Ist das wahr, oder fehlt mir etwas?
Ein wenig mehr rumgespielt und ich fand, dass ein Konverter die UnsetValue zurückkehren kann ich brauche:
class MultiValueFailConverter : IMultiValueConverter
{
public object Convert(
object[] values,
Type targetType,
object parameter,
System.Globalization.CultureInfo culture)
{
if (values == null ||
values.Length != 2 ||
values.Any(x=>x == null))
return System.Windows.DependencyProperty.UnsetValue;
return values;
}
public object[] ConvertBack(
object value,
Type[] targetTypes,
object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotImplementedException("Too complex hurt brain.");
}
}
Dies ist jedoch wie ein schmutziger schmutziger Hack scheint. Ich würde denken, dass ein Szenario wie dieses im Rahmen berücksichtigt würde. Ich kann jedoch nichts in Reflector finden.
Gute Frage! – Chris