2010-03-26 3 views
0

J'ai une exigence dans laquelle j'ai besoin d'afficher sur un formulaire d'utilisateur, un bouton de création si cet utilisateur n'a pas de profil et un bouton d'édition s'il a un profil. J'utilise un convertisseur pour changer la visibilité du bouton. Tout fonctionne bien au départ, mais au moment où je clique sur la fenêtre Créer un profil, et c'est le constructeur qui charge la fenêtre de profil, après que même si je ferme cette fenêtre sans rien faire, le bouton Créer devient modifier. Je suppose que c'est parce que le constructeur aurait créé l'objet de profil et donc même si l'objet est vide, il me montre le bouton d'édition au lieu de créer. Y a-t-il un autre moyen d'afficher la visibilité du bouton?Convertisseur de visibilité de bouton

Répondre

1

Avez-vous vraiment besoin de modifier la visibilité du bouton? Il ne s'agit généralement pas d'une bonne pratique pour l'utilisateur, car cela peut semer la confusion chez les gens quant à ce qu'ils doivent faire ensuite. Pour désactiver simplement le bouton, vous pouvez ajouter une logique à la méthode CanExecute de la commande local:LaunchEditor. Il existe également un événement CanExecuteChanged qui permet à l'interface utilisateur de répondre dynamiquement aux modifications de l'accessibilité de la commande. Cela peut être la chose la plus facile à faire.

Si vous vraiment besoin de cacher le bouton, alors vous pouvez probablement créer un style avec un déclencheur basé sur IsEnabled propriété du bouton qui fera la visibilité du bouton Hidden lorsque IsEnabled==false. Vous devez cependant toujours utiliser la commande pour contrôler l'accessibilité du bouton.

Dans votre cas, vous écririez deux méthodes: CanCreateProfile et CanEditProfile, et les inclure dans votre commande de liaison (soit en XAML ou dans le codebehind):

private void CanCreateProfile(object sender, CanExecuteRoutedEventArgs e) 
{ 
    e.CanExecute = userProfile == null; 
} 

private void CanEditProfile(object sender, CanExecuteRoutedEventArgs e) 
{ 
    e.CanExecute = userProfiel != null; 
} 
+0

Merci beaucoup pour votre réponse. Je suis très nouveau sur wpf et C#, donc si vous pouviez me montrer comment faire ça, ce serait génial. – developer

+0

Dans votre code XAML, vous devez définir une liaison de commande, par exemple: ' ... ' – LBushkin

+0

Vous pouvez trouver cet article MSDN utile: http://msdn.microsoft.com/en-us/magazine/cc785480.aspx – LBushkin