Как FallbackValue работает с MultiBinding?

Я спрашиваю, потому что это, кажется, не работает.

Предположите, что мы связываем со следующим объектом:

public class HurrDurr
{
  public string Hurr {get{return null;}}
  public string Durr {get{return null;}}
}

Ну, казалось бы, что, если бы мы использовали MultiBinding против этого, значение нейтрализации показали бы, правильно?

<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>

Однако результат, на самом деле, "к". Даже вынуждая привязку возвратиться DependencyProperty.UnsetValue не работает:

<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>

Попробованный то же TargetNullValue, который был также промахом полностью вокруг.

Таким образом, кажется, что MultiBinding никогда не будет использовать FallbackValue. Действительно ли это верно, или я пропускаю что-то?


Немного более бездельничание и я нашли, что преобразователь может возвратить UnsetValue, в котором я нуждаюсь:

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.");
    }
}

Однако это походит на грязный грязный взлом. Я думал бы, что сценарий как это будет составляться в платформе. Я ничего не могу найти в Отражателе, как бы то ни было.

9
задан 9 January 2013 в 21:47
поделиться