Lo pregunto porque parece que no funciona.¿Cómo funciona FallbackValue con un enlace múltiple?
Supongamos que estamos unión con el siguiente objeto:
public class HurrDurr
{
public string Hurr {get{return null;}}
public string Durr {get{return null;}}
}
Bueno, parece que si se utilizó un MultiBinding contra de esto el valor de retorno se muestra, ¿verdad?
<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>
Sin embargo, el resultado es, de hecho, "a la". Incluso forzando los enlaces para volver DependencyProperty.UnsetValue
no funciona:
<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>
intentado lo mismo con TargetNullValue, que también fue un fracaso en todos los sentidos.
lo que parece que MultiBinding nunca jamás usar FallbackValue. ¿Es esto cierto o me estoy perdiendo algo?
Un poco más de jugar un poco y me encontré con que un convertidor puede devolver el UnsetValue que necesito:
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.");
}
}
Sin embargo, esto parece un truco sucio sucio. Creo que un escenario como este se contabilizaría en el marco. Sin embargo, no puedo encontrar nada en Reflector.
¡Buena pregunta! – Chris