2010-09-15 6 views
0

J'ai un ComboBox qui est lié à une liste. Considérons que j'ai 10 éléments dans la liste, donc dans la liste déroulante aussi.Comment faire pour arrêter ComboBox SelectionChange de l'événement SelectionChanged

Actuellement le 2ème élément est sélectionné dans la zone de liste déroulante.

Maintenant, je sélectionne le 3ème élément dans la ComboBox. Dans l'événement Combobox SelectionChanged, je suis en train de faire une validation et la validation échoue donc je ne veux pas que ma sélection passe du 2ème élément au 3ème élément ou la sélection doit rester dans le 2ème élément.

S'il vous plaît laissez-moi savoir comment faire

Dans l'événement ComboBox SelectionChanged, j'ai essayé de définir ComboBox.SelectedItem = 2ndItem.

Mais cela n'a pas fonctionné correctement.

Espérons, mon exigence est claire. Si vous avez un doute alors n'hésitez pas à me demander.

salutations,

Vimal

Répondre

1

Désactiver l'élément afin que l'utilisateur voit qu'ils ne sont actuellement pas une option (et sélectionnez peuvent pas non plus). Vous pouvez définir la propriété IsEnabled sur le ComboBoxItem.

Si vous travaillez avec MVVM, ajoutez une propriété IsEnabled à votre ViewModel et liez-la à la propriété IsEnabled du conteneur (ItemContainerStyle).

La meilleure option IMO serait cependant, de ne pas montrer les éléments qui ne sont pas sélectionnables.

Mise à jour

Comme promis dans un commentaire, voici le Dispatcher-Code pour régler le SelectedItem retardé:

Dispatcher.BeginInvoke(new Action(delegate { 
    yourComboBox.SelectedItem=yourOldItem;  
    }), System.Windows.Threading.DispatcherPriority.ContextIdle, null); 

Je pense que cela va aider, mais ce n'est pas très agréable. Si vous avez la possibilité de désactiver ou de cacher les éléments, ce serait beaucoup mieux. BTW, j'ai pris ContextIdle pour la priorité du répartiteur. C'est une valeur très forte. Vous pouvez jouer autour de la valeur qui correspond à vos besoins.

CoerceValueCallback

Une autre possibilité serait de tirer de Combobox, modifier les métadonnées du SelectedItem et ajouter un CoerceValueCallback à lui. Là, vous pouvez réinitialiser la valeur.

+0

Désolé, je ne peux pas désactiver l'élément. La validation échoue uniquement en fonction de la logique de validation à l'intérieur de l'événement SelectionChanged. – ksvimal

+0

@ksvimal: Vous pouvez essayer de revenir en arrière avec le Dispatcher. Il sera ensuite sélectionné une fois que toute l'interface utilisateur aura été effectuée. Cela aidera, cependant, IMO est un hack sale. Je vais mettre à jour ma réponse avec un exemple. – HCL

+0

Salut, ça marche. Merci pour vos commentaires :-) Puis-je avoir votre identifiant mail privé? – ksvimal

Questions connexes