Warum erhalte ich DependencyProperty.UnsetValue beim Konvertieren eines Werts in einem MultiBinding?
Habe ich eine extrem einfache IMultiValueConverter, ODER einfach nur zwei Werte. Im Beispiel unten, ich will umkehren den ersten Wert mit einer ebenso einfachen boolean-Wechselrichter.
<MultiBinding Converter="{StaticResource multiBoolToVis}">
<Binding Path="ConditionA" Converter="{StaticResource boolInverter}"/>
<Binding Path="ConditionB"/>
</MultiBinding>
- und Wechselrichter:
public class BoolInverterConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value is bool)
{
return !((bool)value);
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
Wenn ich den boolInverter, der erste Wert in der MultiValueConverter wird eine "DependencyProperty.UnsetValue". Es gibt keine Probleme, wenn ich nicht mit dem Konverter (andere als nicht die Logik, die ich bin wollen, natürlich).
Bin ich etwas fehlt? Stepping über den debugger zeigt, dass die InverseBoolConverter ist richtig Invertierung der Wert, den ich übergeben, aber, der Wert wird dann nicht als "gesendet", um die MultiValueConverter.
InformationsquelleAutor der Frage Erik Kerber | 2010-05-11
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus der MSDN:
UnsetValue ist ein sentinel-Wert, der verwendet wird für die Szenarien, in denen der WPF-eigenschaftensystem nicht in der Lage ist zum bestimmen eines angeforderten DependencyProperty-Wert. UnsetValue verwendet wird, sondern als null-Verweis (Nothing in Visual Basic), weil die null-Referenz ist ein Gültiger Wert der Eigenschaft, sowie eine gültige (und Häufig verwendete) DefaultValue.
Was bedeutet, dass eins der folgenden Dinge:
ControlTemplate
oderDataTemplate
), und der Wert nicht über eine DataSource auf die Zeit der Geladen wird. So wird es Ihrem hit converter zweimal, zuerst mit dem UnsetValue, second mit dem booleschen Wert, also keine Sorge;Binding
falsch ist, d.h. die Bindung kann nicht bestimmen, ein Wert, wodurch die UnsetValue.. sollte Man propbably eine Warnung..Können Sie auch kombinieren-Wandler, wie man es tut.. So ist es wahrscheinlich, dass.
Entfernen Sie den Konverter in die innere Bindung, und es sollte gefixt werden! 🙂
Hoffe, das hilft!
InformationsquelleAutor der Antwort Arcturus