Liaison de la visibilité d’un bouton à une valeur booléenne dans ViewModel

Comment associer la visibilité d’un bouton à une valeur booléenne dans mon ViewModel?

En supposant que AdvancedFormat est un bool , vous devez déclarer et utiliser un BooleanToVisibilityConverter :

     

Notez le Converter={StaticResource BoolToVis} ajouté Converter={StaticResource BoolToVis} .

C’est un modèle très courant lorsque vous travaillez avec MVVM. En théorie, vous pouvez effectuer la conversion vous-même sur la propriété ViewModel (c.-à-d. Simplement créer la propriété elle-même de type Visibility ), même si je préférerais ne pas le faire, car vous êtes maintenant en train de manipuler la séparation des problèmes. La visibilité d’un object devrait vraiment être à la hauteur de la vue.

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 parce que je l’utilise dans de nombreux cas où ce que je lie n’est pas booléen – par exemple, l’affichage d’un élément uniquement si son DataContext n’est pas nul ou l’implémentation d’affichages multi-états la mise en enum dans le modèle de vue.

Conversion bidirectionnelle en c # du booléen à la visibilité

 using System; using System.Windows; using System.Windows.Data; namespace FaceTheWall.converters { class BooleanToVisibilityConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value is Boolean && (bool)value) { return Visibility.Visible; } return Visibility.Collapsed; } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value is Visibility && (Visibility)value == Visibility.Visible) { return true; } return false; } } } 

Il existe généralement deux manières de le faire, une classe de convertisseur ou une propriété dans ViewModel qui convertit essentiellement la valeur pour vous.

J’ai tendance à utiliser l’approche propriété si c’est une conversion unique. Si vous souhaitez le réutiliser, utilisez le convertisseur. Ci-dessous, trouvez un exemple du convertisseur:

  _ Public Class BoolToVisibilityConverter Implements IValueConverter Public Function Convert(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.Convert If value IsNot Nothing Then If value = True Then Return Visibility.Visible Else Return Visibility.Collapsed End If Else Return Visibility.Collapsed End If End Function Public Function ConvertBack(ByVal value As Object, ByVal targetType As System.Type, ByVal parameter As Object, ByVal culture As System.Globalization.CultureInfo) As Object Implements System.Windows.Data.IValueConverter.ConvertBack Throw New NotImplementedException End Function End Class 

Une méthode de propriété ViewModel vérifie simplement la valeur de la propriété booléenne et renvoie une visibilité basée sur celle-ci. Veillez à implémenter INotifyPropertyChanged et appelez-le sur les propriétés Boolean et Visibility pour qu’elles soient correctement mises à jour.

En vue:

  

En vue Modèle:

 public _advancedFormat = Visibility.visible (whatever you start with) public Visibility AdvancedFormat { get{return _advancedFormat;} set{ _advancedFormat = value; //raise property changed here } 

Vous devrez avoir un événement de changement de propriété

  protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) { PropertyChanged.Raise(this, e); } protected void OnPropertyChanged(ssortingng propertyName) { OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); } 

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 ce bouton est cliqué, définissez le property_advancedFormat à la visibilité souhaitée.

Cela peut être réalisé d’une manière très simple 1. Écrivez ceci dans la vue.

  

  1. La propriété booléenne suivante contient la valeur true / false. Voici l’extrait de code. Dans mon exemple, cette propriété est dans la classe UserNote.

     public bool _isHide = false; public bool IsHide { get { return _isHide; } set { _isHide = value; OnPropertyChanged("IsHide"); } } 
  2. C’est la façon dont la propriété IsHide obtient la valeur.

     userNote.IsHide = userNote.IsNoteDeleted;