web-dev-qa-db-fra.com

Pourquoi est-ce que je reçois une dépendanceProperty.EnsetValue lors de la conversion d'une valeur dans un multibinçon?

J'ai un imultivalosconverteur extrêmement simple que deux valeurs simplement ou deux. Dans l'exemple ci-dessous, je souhaite inverser la première valeur en utilisant un onduleur booléen simple simple.

<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
}

Lorsque j'inclus le Boolinverter, la première valeur du MultivéConverter devient une "dépendanceProperty.unsetvalue". Il n'y a pas de problèmes lorsque je n'utilise pas le convertisseur (autre que la logique que je vis ne vise bien sûr).

Est-ce que je manque quelque chose? Traversez le débogueur montre que l'inverseboolconverter inversait correctement la valeur que je passe, mais cette valeur n'est alors pas "envoyée" au multivéeconverter.

29
Erik Kerber

De MSDN:

La nonsetvalue est une valeur sentinelle utilisée pour les scénarios où le système de propriété WPF est incapable de déterminer une valeur de dépendance requisePropriété. La désetvalue est utilisée plutôt que la référence NULL (rien de Visual Basic), car la référence NULL pourrait être une valeur de propriété valide, ainsi qu'une valeur de valeur valide (et fréquemment utilisée).

Ce qui signifie l'une des choses suivantes:

  • Vous utilisez un modèle (ControlTemplate ou DataTemplate), et la valeur n'a pas de jeu de données au moment de la chargement. Donc, il frappera deux fois votre convertisseur, d'abord avec le désétablissement, deuxième avec la valeur booléenne; Donc, rien à craindre;
  • Votre Binding est incorrect, ce qui signifie que la liaison ne peut pas déterminer une valeur, ce qui entraîne le non constitué. Vous devez voir un avertissement ..

En outre, vous ne pouvez pas combiner convertisseurs comme vous le faites .. donc c'est probablement cela.

Retirez le convertisseur dans la liaison interne et il doit être corrigé! :)

J'espère que cela t'aides!

31
Arcturus