43 votes

Déterminez si l'événement Selector.SelectionChanged a été initié par un utilisateur

Est-il possible de déterminer si un événement Selector.SelectionChanged a été déclenché par l'utilisateur ou de manière programmatique ?

Par exemple, j'ai besoin de quelque chose comme une propriété booléenne "IsUserInitiated" qui est vraie uniquement si l'événement SelectionChanged a été déclenché parce que l'utilisateur a modifié la sélection à l'aide de la souris ou du clavier.

1voto

Andreas Zita Points 1622

Normalement, un Sélecteur a son ensemble/sélection modifié lorsque le contrôle est chargé dans la vue. Lorsque cela se produit, la propriété IsLoaded est toujours false. Lorsqu'un utilisateur effectue une sélection manuellement, le contrôle doit évidemment être visible et donc IsLoaded sera true. Essayez d'utiliser cette propriété pour déterminer si un changement est initié par l'utilisateur ou dû au chargement du contrôle.

0voto

Rune Andersen Points 1314

Pourquoi voulez-vous savoir? J'ai codé de nombreux dialogues où j'ai eu des situations similaires - Je ne voulais pas vraiment savoir si l'utilisateur utilisait la souris ou le clavier, mais je voulais un comportement spécifique, et je voulais des effets en déclenchant une liaison pour se comporter de la bonne manière.

Pour la plupart des cas, j'ai trouvé que l'utilisation du motif MVVM - ou du moins la séparation de la logique de l'interface utilisateur - évite souvent ces problèmes.

Donc pour votre problème, j'essaierais d'éliminer le gestionnaire de selectionchanged et d'utiliser uniquement des liaisons - ainsi l'état de l'interface utilisateur est basé sur le modèle en arrière-plan et non sur le câblage des événements.

mvvm: http://fr.wikipedia.org/wiki/Modèle-Vue-VueModèle

0voto

Andreas Points 468

Vous pouvez vérifier les AddedItems et RemovedItems. Si c'était initié par l'utilisateur, les deux propriétés contiennent un élément. Si un élément a été ajouté via le code, la liste RemovedItems devrait être vide. Donc,

if (e.AddedItems.Count>0 && e.RemovedItems.Count > 0) //Initié par l'utilisateur

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X