J'ai un élément de menu de niveau supérieur qui est responsable de l'actualisation d'un DataGrid dans la même fenêtre. Mon flux de contrôle actuel est:WPF toplevel MenuItem activer/désactiver en fonction de la tâche
- utilisateur clique sur Actualiser
- Dans le gestionnaire d'événements de clic, I:
- Désactiver le menuitem, en mettant
oMenuItem.IsEnabled = false
. - Dispatch une action pour actualiser la grille et dans cette action, je réactivez le menuitem, en mettant
IsEnabled = true
- Désactiver le menuitem, en mettant
Le problème est que l'utilisateur peut cliquer rafraîchir même quand il est désactivé et il est aussi si les clics sont mis en file d'attente. Lorsque l'action revient, elle continue à traiter les clics "en file d'attente" restants. Ce que je m'attends à être: tous les clics pendant que le menuitem est désactivé sont ignorés et seulement quand il est activé, les clics sont reconnus.
La chose étrange est que si je viens de le désactiver et ne jamais permettre que cela continue, à savoir, il est disabled.wpf,
Salut Alex. Merci pour la réponse. J'y suis allé aussi avec la commande, et dans mon gestionnaire CanExecute, j'ai vérifié si la propriété IsEnabled de MenuItem était false; essentiellement, e.CanExecute = oMenuItem.IsEnabled. Cela a eu le même comportement avec ma précédente approche non-IAsyncResult. Je vais donner un coup de feu à votre approche, et j'espère que cela sera compris. – Anuj
La chose avec les commandes est que vous pouvez les mettre dans un ViewModel et ainsi séparer la présentation de la logique. Google MVVM si vous ne savez pas de quoi je parle. (En bref - il vous permet de tester votre logique en tant que classe simple sans avoir besoin d'afficher une fenêtre avec toutes les commandes). Quoi qu'il en soit, si vous utilisez MVVM, le champ IAsyncResult doit être stocké dans le ViewModel et non dans la vue. – Alex