11
votes

Silverlight Lié à Inverse de la valeur de la propriété booléenne

Je veux lier une visibilité des commandes à inverse de la valeur de la propriété booléenne. J'ai une propriété Candownload, si c'est vrai, je veux masquer la zone de texte et vice versa. Comment puis-je atteindre cela?

merci


0 commentaires

3 Réponses :


0
votes

J'ai pu résoudre ceci pour un projet récent à l'aide d'un convertisseur de visibilité BOOL sur la visibilité:

if (value is Visibility)


0 commentaires

4
votes

J'utilise un convertisseur de boolvisivibilité qui vous permet de passer "inverse" en tant que converterparameter sur inverse la conversion et montrez uniquement si la propriété est fausse.

public class BoolToVisibilityConverter : IValueConverter
{
    /// <exception cref="ArgumentException">TargetType must be Visibility</exception>
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if(!(value is bool))
            throw new ArgumentException("Source must be of type bool");

        if(targetType != typeof(Visibility))
            throw new ArgumentException("TargetType must be Visibility");

        bool v = (bool) value;

        if(parameter is string && parameter.ToString() == "Inverse")
            v = !v;

        if (v)
            return Visibility.Visible;
        else
            return Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}


1 commentaires

Ceci est idéal puisque vous n'avez besoin que d'un paramètre.



41
votes

4 commentaires

J'ai un problème étrange. Lorsque je participe à la méthode de convertie et survolez sur TEGETTYPE, cela indique System.Windows.Visibilité mais vérifiez si (TargleType est visibilité) échoue. Quand je fais cibletype.gettype (). Tostring () Dans la fenêtre immédiate, il renvoie System.RuntimeType! Je suis confus ce qui se passe ici


C'est comme ça que je suis liant


@JoLLOT: le paramètre cibletype de type type system.type , dans ce cas, il a actuellement la valeur de System.Windows.Visibilité . (Lisez-le à nouveau soigneusement, c'est l'un des moments "algèbre" où rien d'autre ne peut avoir de sens que le penny tombe.) Lorsque vous faites cibletype.getType () Vous avez maintenant un type qui a la valeur d'un type type , dans ce cas system.runtimetype qui dérive de system.type . Si cette dernière phrase n'a pas de sens cela, car vous n'avez pas encore saisi ma première phrase. Voir: - MSDN.MicRosoft.com/ fr-US / bibliothèque / system.type (v = vs.100) .aspx


Vous pouvez améliorer légèrement la classe en utilisant l'argument de paramètre pour inverser (ou non) la valeur renvoyée.