Pourquoi dois-je obtenir une DependencyProperty.UnsetValue lors de la conversion d'une valeur dans une MultiBinding?
J'ai une très simple IMultiValueConverter que, tout simplement, OU deux valeurs. Dans l'exemple ci-dessous, je veux inverser la première valeur à l'aide d'un tout aussi simple booléen de l'onduleur.
<MultiBinding Converter="{StaticResource multiBoolToVis}">
<Binding Path="ConditionA" Converter="{StaticResource boolInverter}"/>
<Binding Path="ConditionB"/>
</MultiBinding>
et l'onduleur:
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
}
Quand j'inclus le boolInverter, la première valeur dans la MultiValueConverter devient un "DependencyProperty.UnsetValue". Il n'y a pas de problèmes quand je ne suis pas d'utiliser le convertisseur (autres que de ne pas la logique, que je poursuis, bien sûr).
Suis-je raté quelque chose? Parcourant le débogueur montre que la InverseBoolConverter est bien l'inversion de la valeur que je passe, mais cette valeur est alors de ne pas être "envoyé" à la MultiValueConverter.
- voir celui-ci: stackoverflow.com/questions/683863/...
Vous devez vous connecter pour publier un commentaire.
À partir de MSDN:
UnsetValue est une sentinelle de la valeur qui est utilisée pour les scénarios où l'WPF système de la propriété est impossible de déterminer une demande de DependencyProperty valeur. UnsetValue est utilisée plutôt que la référence null (Nothing en Visual Basic), parce que nulle référence pourrait être valide, la valeur de la propriété, ainsi qu'un valide (et fréquemment utilisé) Valeur par défaut.
Qui signifie que l'une des choses suivantes:
ControlTemplate
ouDataTemplate
), et la valeur n'est pas une source de données au moment de la cours de Chargement. Donc, il va frapper votre convertisseur à deux reprises, d'abord avec la UnsetValue, deuxième avec la valeur booléenne; donc rien à craindre;Binding
est incorrect, ce qui signifie la Liaison ne peut pas déterminer une valeur, de sorte que l'UnsetValue.. Vous devriez propbably voir un avertissement..Aussi, vous ne pouvez pas combiner les Convertisseurs comme vous le faites.. Donc c'est probablement que.
Supprimer le Convertisseur dans l'intérieur de la Reliure, et il doit être fixé! 🙂
Espérons que cette aide!
if (value == DependencyProperty.UnsetValue) {// Do Stuff}
Tout inconvénient de cette approche?bool outTest; if (bool.TryParse(value.ToString(), out outTest) { var a = (bool) value; .... }
donc DependencyProperty.UnsetValue ne sera pas converti.