Je demande parce que cela ne semble pas fonctionner.Comment FallbackValue fonctionne avec MultiBinding?
On suppose nous lier à l'objet suivant:
public class HurrDurr
{
public string Hurr {get{return null;}}
public string Durr {get{return null;}}
}
Eh bien, il semblerait que si nous avons utilisé un MultiBinding contre ce la valeur de repli serait montrée, non?
<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>
Toutefois, le résultat est, en fait, "à la". Même forcer les liaisons à retourner DependencyProperty.UnsetValue
ne fonctionne pas:
<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>
Essayé la même chose avec TargetNullValue, qui était aussi un buste tout autour.
Il semble donc que MultiBinding ne jamais utiliser FallbackValue. Est-ce vrai ou ai-je oublié quelque chose?
Un peu plus de déconner et j'ai trouvé qu'un convertisseur peut retourner le UnsetValue j'ai besoin:
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.");
}
}
Cependant, cela semble être un hack crasseuse. Je pense qu'un scénario comme celui-ci serait pris en compte dans le cadre. Cependant, je ne trouve rien dans Reflector.
Bonne question !! – Chris