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? P>
merci p>
3 Réponses :
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)
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(); } }
Ceci est idéal puisque vous n'avez besoin que d'un paramètre.
Ce type de question est demandé Le code est assez simple, je vais aussi la coller ici aussi: - p> Vous pouvez désormais créer un convertisseur à une seule doublure: - alors pour que vous puissiez créer un convertisseur d'instance dans une ressource comme celle-ci: - p> notez le truevalue CODE> et
FAXVALUE CODE> Sont les échanges de l'ordre plus naturel vous donnant la logique inversée que vous vouliez. Avec cela dans le
Ressources Code> dans votre
UserControl CODE> ou même App.xaml, vous pouvez maintenant l'utiliser pour se lier à la propriété
Candownload code> propriété sur
code>
Visibilité code> Propriété: - P>
<TextBox Visibility="{Binding CanDownload, Converter={StaticResource InverseVisibility}}" />
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 code> de type type b>
system.type code>, dans ce cas, il a actuellement la valeur b> de
System.Windows.Visibilité code>. (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 () code> Vous avez maintenant un type
code> qui a la valeur d'un type
type code>, dans ce cas
system.runtimetype code> qui dérive de
system.type code>. 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.