2009-03-19 13 views
4

dans ma fenêtre J'ai des boutons pour charger et enregistrer des méthodes. J'utilise CommandBinding et le bouton save a une propriété CanExecute pour empêcher l'utilisateur d'enregistrer les données avant qu'elles ne soient chargées.Le contrôle ne s'actualise pas après que CanExecute-Result change

CanExecute-Methode est connecté à une simple valeur bool appelée « canSaveXML »

private void Save_CanExecute(object sender, CanExecuteRoutedEventArgs e) 
{ 
    if (canSaveXML == false) 
    { 
     e.CanExecute = false; 
    } 
    else 
    { 
     e.CanExecute = true; 
    } 
    e.Handled = true; 
} 

Mon intention est de mettre canSaveXML = true après que les données a été chargé, mais le contrôle ne met pas à jour après que la valeur a changé . J'ai fait quelques lectures et j'ai découvert que je devais appeler CommandManager.InvalidateRequerySuggested. Je fais ça maintenant et mon code ressemble à ceci.

canSaveXML = true; 
CommandManager.InvalidateRequerySuggested(); 

Mais le contrôle (bouton) ne s'actualise toujours pas. Je suis toujours désactivé jusqu'à ce que je déclenche quoi que ce soit sur l'interface utilisateur ou minimixe/maximiser la fenêtre. Après je l'ai fait, le bouton est activé.

Quel est le problème ici?

Dans un exemple MSDN, CommandManager.InvalidateRequerySuggested est appelé avec un dispatchertimer encore et encore, mais je refuse de croire que ce serait la seule solution.

Répondre

8

Ok, je me suis découvert.

canSaveXML = true; 
CommandManager.InvalidateRequerySuggested(); 

était le code d'un travailleur d'arrière-plan. Pas bon. Vous devez indiquer au répartiteur de la fenêtre d'appeler CommandManager.InvalidateRequerySuggested();

+1

Merci, vous me sauvez beaucoup de maux de tête. –

+0

Merci pour la réponse. J'ai ajouté la méthode CommandManager.InvalidateRequerySuggested() dans le gestionnaire d'événement RunWorkerCompleted et j'ai travaillé comme un charme! – OptimizePrime

Questions connexes