Я спрашиваю, потому что это, кажется, не работает.
Предположите, что мы связываем со следующим объектом:
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.");
}
}
Однако это походит на грязный грязный взлом. Я думал бы, что сценарий как это будет составляться в платформе. Я ничего не могу найти в Отражателе, как бы то ни было.