我問,因爲它似乎沒有工作。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.");
}
}
然而,這似乎是一個骯髒污穢的黑客。我認爲這樣的場景會在框架中被考慮。然而,我在Reflector中找不到任何東西。
好問題!! – Chris 2010-04-19 16:32:08