Comment lier la visibilité d'un bouton à une valeur booléenne dans mon ViewModel?
<Button Height="50" Width="50" Style="{StaticResource MyButtonStyle}"
Command="{Binding SmallDisp}" CommandParameter="{Binding}" Cursor="Hand"
Visibility="{Binding Path=AdvancedFormat}" />
c#
wpf
xaml
data-binding
raym0nd
la source
la source
Réponses:
En supposant qu'il
AdvancedFormat
s'agit d'unbool
, vous devez déclarer et utiliser unBooleanToVisibilityConverter
:Notez l'ajout
Converter={StaticResource BoolToVis}
.Il s'agit d'un modèle très courant lorsque vous travaillez avec MVVM. En théorie , vous pourriez faire la conversion vous - même sur la propriété ViewModel (soit juste faire le bien immobilier de type
Visibility
) mais je préférerais ne pas le faire, puisque maintenant vous êtes déconner avec la séparation des préoccupations. La visibilité d'un élément doit vraiment être à la hauteur de la vue.la source
Il existe une troisième méthode qui ne nécessite pas de convertisseur ou de modification de votre modèle de vue: utilisez un style:
J'ai tendance à préférer cette technique car je l'utilise dans de nombreux cas où ce à quoi je me lie n'est pas booléen - par exemple, afficher un élément uniquement s'il
DataContext
n'est pas nul, ou implémenter des affichages multi-états où différentes mises en page apparaissent en fonction du définition d'une énumération dans le modèle de vue.la source
TextBlock
à qui aTextWrapping="Wrap"
été donné. Maintenant, cette propriété d'encapsulation n'y est pas définie.Conversion bidirectionnelle en c # de booléen à visibilité
la source
En règle générale, il existe deux façons de le faire, une classe de convertisseur ou une propriété dans le Viewmodel qui convertit essentiellement la valeur pour vous.
J'ai tendance à utiliser l'approche de propriété s'il s'agit d'une conversion unique. Si vous souhaitez le réutiliser, utilisez le convertisseur. Ci-dessous, trouvez un exemple du convertisseur:
Une méthode de propriété ViewModel vérifierait simplement la valeur de la propriété booléenne et retournerait une visibilité basée sur cela. Veillez à implémenter INotifyPropertyChanged et à l'appeler sur les propriétés Boolean et Visibility pour être mis à jour correctement.
la source
Ceci peut être réalisé d'une manière très simple 1. Ecrivez ceci dans la vue.
Voici la propriété booléenne qui contient la valeur vrai / faux. Voici l'extrait de code. Dans mon exemple, cette propriété est dans la classe UserNote.
C'est ainsi que la propriété IsHide obtient la valeur.
la source
En vue:
En vue Modèle:
Vous devrez avoir un événement de changement de propriété
Voici comment ils utilisent Model-view-viewmodel
Mais puisque vous voulez qu'il soit lié à un booléen, vous aurez besoin d'un convertisseur. Une autre méthode consiste à définir un booléen à l'extérieur et, lorsque vous cliquez sur ce bouton, définissez property_advancedFormat sur la visibilité souhaitée.
la source
private Visibility _advancedFormat = Visibility.visible
Cela fonctionne très bien surUWP
merci.Depuis Windows 10 15063 et plus
Depuis Windows 10 build 15063, il existe une nouvelle fonctionnalité appelée «Conversion de visibilité implicite» qui lie la visibilité à la valeur booléenne de manière native - Il n'est plus nécessaire d'utiliser un convertisseur.
(voir https://social.technet.microsoft.com/wiki/contents/articles/34846.uwp-compiled-binding-windows-10-anniversary-update.aspx#Implicit_Visibility_conversion ).
Mon code (qui suppose que MVVM est utilisé, et le modèle 10 également):
la source