2014-05-14 1 views
0

J'ai un projet dans lequel un composant ComboBox interagit avec 2 curseurs. Chacune de ces 3 commandes est déclenchée par des événements: à savoir un SelectionChanged pour le ComboBox et un ValueChanged pour les 2 curseurs.Événement WPF Combobox SelectionChanged

Je pensais que l'événement ValueChanged me donnait des problèmes, ne mettant pas à jour les valeurs et min/max en conséquence à la sélection de liste déroulante. Pour une raison quelconque, j'ai supposé que peut-être les deux événements ont été déclenchés simultanément entraînant une confusion de mes variables. Eh bien, j'ai décidé de changer mes événements ValueChanged pour qu'ils ne mettent à jour qu'une étiquette afin de voir si cela a réglé le problème. Il n'a pas. En d'autres termes, l'événement SelectionChanged est l'endroit où réside mon problème.

En regardant à travers mon code, je ne vois pas de problème, et à ce stade, la seule chose que je peux penser est comme suit:

private void chanList_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
switch (chanList.Text) 
{ 
       case "Channel 1": 
        { // blablabla } 

} 
} 

raison du problème est que chanList.Text ne contient la "nouvelle sélection", elle contient toujours l'ancienne. Je devine que lorsque l'événement "SelectionChanged" est déclenché, le contenu de la zone de liste déroulante (dans mon cas chanList.Text) n'est pas encore "mis à jour". Donc, il en résulte de prendre le mauvais cas dans mon commutateur.

Maintenant mes questions: 1. mes hypothèses sont-elles correctes? 2. Si oui, à quoi dois-je remplacer mon test Switch? En supposant que chanList.Text n'est pas encore mis à jour, peut-être aller avec quelque chose chanList.SelectedItem devrait être le chemin à parcourir. Cependant, j'ai été capable de trouver le bon verbeux pour accéder au contenu (texte) de l'élément sélectionné ... C'est pourquoi j'y allais avec chanList.Text qui a bien fonctionné au moins jusqu'à ce que je commence à utiliser cet événement.

Merci pour l'aide! Steve

+0

Définissez des points d'arrêt et testez vos hypothèses. – PoweredByOrange

+0

[Créez un exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve) dans le code et postez-le ici dans votre question. De cette façon, nous pouvons tester votre problème et trouver une solution. Comme c'est le cas, un certain nombre de choses pourraient causer votre problème. – Sheridan

Répondre

0

Le texte de la zone de liste déroulante ne sera pas modifié dans le gestionnaire d'événements SelectionChanged. Les sélections se trouvent dans l'objet SelectionChangedEventArgs. Plus précisément, e.AddedItems. Il est possible, bien que ce ne soit peut-être pas pour votre contrôle, que l'utilisateur ait sélectionné plusieurs éléments dans la liste déroulante, donc e.AddedItems est une liste. Faites défiler la liste et faites les mises à jour nécessaires.

private void chanList_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     foreach (object item in e.AddedItems) 
     { 
      if (item is string) 
      { 
       switch (item as string) 
       { 
        case "Channel 1": 
         Console.WriteLine("Channel 1"); 
         break; 
        default: 
         break; 
       } 
      } 
     } 
    } 
Questions connexes