J'utilise un BooleanToVisibilityConverter
dans WPF pour lier la Visibility
propriété d'un contrôle à un Boolean
. Cela fonctionne bien, mais j'aimerais que l'un des contrôles masque si le booléen est true
et montre s'il l'est false
.
.net
wpf
binding
visibility
Ruben Bartelink
la source
la source
Réponses:
Implémentez votre propre implémentation de IValueConverter. Un exemple d'implémentation est à
http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter.aspx
Dans votre méthode Convert, faites-lui renvoyer les valeurs que vous souhaitez au lieu des valeurs par défaut.
la source
Au lieu d'inverser, vous pouvez atteindre le même objectif en utilisant une
IValueConverter
implémentation générique qui peut convertir une valeur booléenne en valeurs cibles configurables pour true et false. Voici une de ces implémentations:Ensuite, sous-classez-le où
T
estVisibility
:Enfin, voici comment vous pouvez utiliser
BooleanToVisibilityConverter
ci-dessus en XAML et le configurer pour, par exemple, utiliserCollapsed
pour true etVisible
pour false:Cette inversion est utile lorsque vous souhaitez vous lier à une propriété booléenne nommée
IsHidden
par oppositionIsVisible
.la source
Visibility
propriétés dans votre modèle de vue.puis passez un vrai ou faux comme ConverterParameter
la source
else if (value is bool?)
partie, ReSharper me dit "L'expression est toujours fausse". En outre, laif (flag)
partie peut être réécrite de manière plus concise commereturn flag ? Visibility.Visible : Visibility.Collapsed;
.var nullable = (bool?)value; flag = nullable.GetValueOrDefault();
peut être beaucoup plus courte et simple:flag = (bool?)value ?? false;
Écrire le vôtre est la meilleure solution pour le moment. Voici un exemple de convertisseur qui peut faire les deux sens normal et inversé. Si vous avez des problèmes avec cela, demandez simplement.
la source
BooleanToVisibilityConverter
Parameter direction = Parameter.Normal; if (parameter != null) direction = (Parameter)Enum.Parse(typeof(Parameter), (string)parameter);
Il y a aussi le projet WPF Converters sur Codeplex. Dans leur documentation, ils disent que vous pouvez utiliser leur MapConverter pour convertir de l'énumération de visibilité en booléen
la source
Une autre façon de lier la valeur booléenne ViewModel (IsButtonVisible) avec la propriété de visibilité de contrôle xaml. Pas de codage, pas de conversion, juste du style.
la source
Ou à la manière des vrais paresseux, utilisez simplement ce qui existe déjà et retournez-le:
la source
Si vous n'aimez pas écrire un convertisseur personnalisé, vous pouvez utiliser des déclencheurs de données pour résoudre ce problème:
la source
Je viens de publier un article à ce sujet. J'ai utilisé une idée similaire à celle de Michael Hohlios. Seulement, j'ai utilisé Propriétés au lieu d'utiliser le "paramètre d'objet".
Lier la visibilité à une valeur booléenne dans WPF L'
utilisation de propriétés le rend plus lisible, à mon avis.
la source
En voici un que j'ai écrit et que j'utilise beaucoup. Il utilise un paramètre de convertisseur booléen qui indique s'il faut ou non inverser la valeur, puis utilise XOR pour effectuer la négation:
Voici une table de vérité XOR pour référence:
la source
Je cherchais une réponse plus générale, mais je ne l'ai pas trouvée. J'ai écrit un convertisseur qui pourrait aider les autres.
Il est basé sur le fait que nous devons distinguer six cas différents:
Voici ma mise en œuvre pour les 4 premiers cas:
exemple:
Je pense que les paramètres sont faciles à retenir.
J'espère que ça aide quelqu'un.
la source
Vous pouvez utiliser QuickConverter .
Avec QuickConverter, vous pouvez écrire la logique du convertisseur en ligne avec votre BindingExpression
Voici un convertisseur BooleanToVisibility inversé:
Vous pouvez ajouter QuickConverter via NuGet. Jetez un œil à la documentation pour l'installation. Lien: https://quickconverter.codeplex.com/
la source
Écrivez votre propre converti.
la source
Une version simple à sens unique qui peut être utilisée comme ceci:
peut être implémenté comme ceci:
la source
Convertissez tout en tout (booléen, chaîne, énumération, etc.):
Exemples XAML:
la source
Plutôt que d'écrire votre propre code / de réinventer, pensez à utiliser CalcBinding :
CalcBinding est également très utile pour de nombreux autres scénarios.
la source
Je sais que c'est daté, mais vous n'avez rien à réimplémenter.
Ce que j'ai fait, c'est d'annuler la valeur de la propriété comme ceci:
....
Et cela fonctionne très bien!
Est-ce que je manque quelque chose?
la source