Comment faire pour modifier un contrôle WPF est la visibilité de ViewModel
J'ai une application WPF où essayé d'implémenter le pattern MVVM et Prism 2. J'ai un Usercontrol qui a souscrit à un événement déclenché à partir d'un autre Usercontrol. Je voudrais activer /désactiver la visibilité de quelques éléments enfants dans le abonnement de contrôle. Les événements sont déclenchés correctement, même moi, je suis avec succès en mesure de lier les données à certains éléments. Comment puis-je lier de Visibilité ou de toute propriété de style pour cette question, avec le ViewModel et de les modifier de façon dynamique.
OriginalL'auteur Raj | 2009-09-12
Vous devez vous connecter pour publier un commentaire.
Vous pouvez avoir une propriété booléenne dans votre ViewModel et lier la propriété à la propriété de Visibilité de vos contrôles. Puisque vous serez asigning une valeur booléenne et la Visibilité de la propriété s'attend à une Visibilité de valeur de l'énumération, vous devrez utiliser le BooleanToVisibilityConverter convertisseur pour faire la conversion,
Espère que cette aide.
Ezequiel Jadib
Désolé de mon erreur. Les travaux de cette. Je vous remercie.
OriginalL'auteur Ezequiel Jadib
Même si l'ajout d'une propriété Booléenne et à l'aide d'une valeur converter fonctionne, je vous recommande l'ajout d'une propriété de type de la Visibilité à votre ViewModel, par exemple
L'avantage de cette méthode est que vous n'avez pas besoin d'écrire un convertisseur pour chaque propriété que vous souhaitez exprimer d'une façon visuelle (par exemple, pour un niveau de stock qui transforme une étiquette rouge quand il descend en dessous de 10, vous pourriez avoir un convertisseur que vous utilisez une fois ou tout simplement exposer un StockLabelBrush de la propriété à partir de votre VM)
shouldShowImage
, que le changement n'est pas envoyé à la vue.C'est vrai, mais il ya un couple de façons de traiter le problème. Vous pouvez gérer l'
PropertyChanged
cas deshouldShowImage
et lever une nouvellePropertyChanged
événement, ou de ne permettre l'accès àshouldShowImage
via un wrapper de la propriété qui déclenche des événements pour les deux propriétés.Je vois deux choses qui se passent ici, (je), j'ai décider si quelque chose est vrai ou faux (ce qui semble approprié pour une VM à faire) et (ii) je prends cette valeur booléenne et de décider si un certain contrôle doit être visible ou non (ce qui semble approprié pour la Vue. J'aurais pensé à l'aide d'un convertisseur ici serait l'idéal en termes de maintien de la V/VM limite propre.
la différence entre un ViewModel et un Modèle est que le ViewModel est ce qui est affiché dans la vue. Sans cette logique dans le ViewModel vous venez d'avoir un Modèle. Aussi, il est très facile de tester l'élément sur la vue devient visible lorsque le Booléen changements si la logique est dans la machine virtuelle.
OriginalL'auteur Darren
Je sais que c'est une vieille question, mais il y a une solution simple pour les personnes qui rencontrent ce problème et de trouver cette réponse.
Dans votre modèle de vue, créer un "Visibilité" de la propriété comme suit:
Dans votre XAML, se lier à elle de la sorte:
Maintenant, à partir de votre modèle de vue, vous pouvez définir
ShowModifyButtons
àVisibility.Collapsed
ouVisibility.Visible
en tant que de besoin.OriginalL'auteur James