J'ai une application WPF où j'ai essayé d'implémenter le modèle MVVM et Prism 2. J'ai un Usercontrol qui a souscrit à un événement déclenché par un autre Usercontrol. Je voudrais basculer la visibilité de quelques éléments enfants dans le contrôle d'abonnement. Les événements sont déclenchés correctement, même si je réussis à lier des données à certains éléments. Comment puis-je lier la visibilité ou toute propriété de style avec le ViewModel et les modifier dynamiquement.Comment modifier la visibilité d'un contrôle WPF à partir de ViewModel
Répondre
Vous pouvez avoir une propriété booléenne dans votre ViewModel et lier cette propriété à la propriété Visibility de vos contrôles. Étant donné que vous asigning une valeur booléenne et la propriété de visibilité attend une valeur d'énumération de visibilité, vous devrez utiliser le convertisseur BooleanToVisibilityConverter pour effectuer la conversion,
<Style.Resources>
<BooleanToVisibilityConverter x:Key="booleanToVisibilityConverter" />
</Style.Resources>
<Image Visibility="{Binding Path=ShowImage,
Converter={StaticResource booleanToVisibilityConverter}}"/>
Hope this helps.
Ezequiel Jadib
Bien que l'ajout d'une propriété booléenne et en utilisant un convertisseur fonctionne de valeur, je recommande l'ajout d'une propriété de type de visibilité à votre ViewModel, par exemple
public Visibility ImageVisibility
{
get { return shouldShowImage ? Visibility.Visible : Visibility.Collapsed }
}
L'avantage de cette méthode, vous est ne pas besoin d'écrire un convertisseur pour chaque propriété que vous souhaitez exprimer d'une manière visuelle (par exemple, pour un niveau de stock qui devient rouge étiquette quand il tombe en dessous de 10, Vous pouvez avoir un convertisseur que vous utilisez une fois ou simplement exposer une propriété StockLabelBrush de votre machine virtuelle)
Bien que cette réponse soit élégante, il y a un problème. Si le programme change 'shouldShowImage', cette modification n'est pas envoyée à la vue. – James
C'est vrai, mais il y a plusieurs façons de gérer le problème. Vous pouvez gérer l'événement 'PropertyChanged' à partir de' shouldShowImage' et déclencher un nouvel événement 'PropertyChanged', ou seulement autoriser l'accès à' shouldShowImage' via une propriété wrapper qui déclenche des événements pour les deux propriétés. – 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 trouvent cette réponse.
Dans votre modèle de vue, créer une "visibilité" propriété comme ceci:
public Visibility ShowModifyButtons
{
get { return (Visibility)GetValue(ShowModifyButtonsProperty); }
set { SetValue(ShowModifyButtonsProperty, value); }
}
public static readonly DependencyProperty ShowModifyButtonsProperty =
DependencyProperty.Register("ShowModifyButtons", typeof(Visibility), typeof(FileMatchViewModel),
new UIPropertyMetadata(Visibility.Collapsed));
Dans votre XAML, se lient à elle comme ceci:
<Button Focusable="False" Content="Save" Width="100" Margin="10" Visibility="{Binding ShowModifyButtons}"/>
Maintenant, à partir de votre modèle de vue, vous peut définir ShowModifyButtons
à Visibility.Collapsed
ou Visibility.Visible
selon les besoins.
- 1. UserControl Visibilité de liaison par ViewModel
- 2. Comment modifier la visibilité de la première ligne dans datagridview
- 3. générer viewmodel à partir du modèle?
- 4. wpf: modifier la taille de police pour le contrôle WebBrowser
- 5. Informations d'accès WPF à partir du contrôle conteneur
- 6. Comment puis-je obtenir le contrôle lié à une propriété dans la fin du ViewModel?
- 7. Model View ViewModel dans WPF avec WebBrowser
- 8. Liaison de liste ListBox imbriquée WPF à l'aide de ViewModel
- 9. Modifier la visibilité de l'étiquette ASP.NET avec JavaScript
- 10. Obtention d'une référence à ViewModel à partir d'un IValueConverter
- 11. Comment rendre la vidéo à partir d'images brutes dans WPF?
- 12. WPF - Faites glisser à partir de DataTemplate
- 13. XAML ne charge pas UserControl à partir de l'objet ViewModel
- 14. GlobalSettings ViewModel
- 15. Ajout d'un contrôle utilisateur WPF à partir du code
- 16. WPF MVVM manière correcte à l'événement feu sur la vue de ViewModel
- 17. Comment pouvons-nous définir la visibilité d'un bouton placé à l'intérieur d'un contrôle Infragistrics Windows Grid?
- 18. WPF - MVVM Commande lie Sub ViewModel
- 19. Obtenir un contrôle spécifique à partir d'une fenêtre WPF?
- 20. ASP.NET ne peut pas changer la visibilité d'un contrôle FormView
- 21. Comment mettre en évidence et sélectionner du texte dans une TextBox à partir de ViewModel
- 22. WPF: actualisation d'un contrôle avec une propriété liée à l'aide de la vue Modèle View-Model
- 23. Comment modifier la visibilité d'un lien hypertexte lorsque la souris le survole?
- 24. Comment lier à une propriété de ViewModel à partir d'un GridView
- 25. La visibilité de liaison pour contrôler dans la classe différente avec WPF
- 26. ViewModel au-dessus de XDocument
- 27. __ visibilité visibilité pour PHP
- 28. Dans WPF, comment accéder à un objet défini dans Window.xaml à partir d'un contrôle utilisateur imbriqué?
- 29. Dans WPF, comment puis-je lier au ViewModel et avoir divers éléments XAML liés aux méthodes du ViewModel?
- 30. WPF Prism V2 Utilisation de M-V-VM - Ajout d'une vue à une région du ViewModel
D'une certaine manière, cela n'a pas fonctionné pour moi. J'ai déclaré le convertisseur dans la section Usercontrol.Resources et utilisé les liaisons comme vous l'avez expliqué dans le commentaire. – Raj
Désolé mon erreur. Cela marche. Je vous remercie. – Raj