2017-01-30 4 views
0

Ich bin etwas neu in C# und WPF-Projekten. Also hier ist mein Problem.Ändern Sie den Combobox-Wert entsprechend einem anderen Combobox-Wert?

Ich habe 2 Combobox mit String-Listen gefüllt.

Je nach Wert meiner ersten Combobox möchte ich die in der zweiten Combobox verfügbare Liste ändern.

Hier ist mein Code:

public partial class MainWindow : Window 
{ 
    //creation de listes 
    List<string> themesE17 = new List<string>(); 
    List<string> themesH17 = new List<string>(); 
    List<string> themesE16 = new List<string>(); 
    List<string> themesH16 = new List<string>(); 



    public MainWindow() 
    { 
     InitializeComponent(); 

     initLists(); 

     string value = comboSaison.Text; 
     Console.WriteLine("The value of season combobox " + value); 

    } 

    public void initLists() 
    { 
     //saison 2017 
     themesE17.Add("Ete 17 Theme1"); 
     themesE17.Add("Ete 17 Theme2"); 

     themesH17.Add("Hiver 17 Theme1"); 
     themesH17.Add("Hiver 17 Theme2"); 

     //saison 2016 
     themesE16.Add("Ete 16 Theme1"); 
     themesE16.Add("Ete 16 Theme2"); 

     themesH16.Add("Hiver 16 Theme1"); 
     themesH16.Add("Hiver 16 Theme2"); 
    } 

    private void comboSaison_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     if (comboSaison.Text == "Ete 2017") 
     { 
      comboTheme.ItemsSource = themesE17; 
      Console.WriteLine("1st if E17"); 
     } 

     else if (comboSaison.Text == "Hiver 2017") 
     { 
      comboTheme.ItemsSource = themesH17; 
      Console.WriteLine("2nd if H17"); 
     } 

     else if (comboSaison.Text == "Ete 2016") 
     { 
      comboTheme.ItemsSource = themesE16; 
      Console.WriteLine("3rd if E16"); 
     } 

     else if (comboSaison.Text == "Hiver 2016") 
     { 
      comboTheme.ItemsSource = themesH16; 
      Console.WriteLine("4th if H16"); 
     } else 

      Console.WriteLine("Error in selection !"); 
    } 
} 

Aber es funktioniert nicht, mein Console.WriteLine zeigt mir das Programm das ist, wenn Fälle in zufälliger Weise in allem geht, wenn ich meine Werte in der ersten Combobox wählen .

Hilfe wäre dankbar, danke!

+0

Was die comboSaison ausgewählte Element wird, wenn Sie Ihre Auswahl ändern? Versuchen Sie es mit ComboSaison.SelectedItem und finden Sie heraus. –

+0

ist es "Ete 2017" als ausgewählter Wert, also sollte es die themesE17 Liste in der Combobox mit dem Namen comboTheme @PeterB sein. – Jay

+0

Mit Databinding denke ich, eine zuverlässigere Option wäre, an eine beobachtbare Sammlung von Strings in XAML zu binden, und aktualisieren Sie dann die Inhalt dieser Sammlung und nicht die Bindung. – LordWilmore

Antwort

4

ComboBox enthält Elemente. So finden Sie nur ausgewählt und seine Beschriftung.

private void comboSaison_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    var obj = (ComboBox)sender; 
     var ind = obj.SelectedIndex; 
     var selectedItem = (ComboBoxItem)obj.Items[ind]; 
     switch ((string)selectedItem.Content) 
     { 
      case "Ete 2017": 
       comboTheme.Items.Clear(); 
       foreach (var item in themesE17) 
        comboTheme.Items.Add(new ComboBoxItem() { Content = item }); 
       break; 
      case "Hiver 2017": 
       comboTheme.Items.Clear(); 
       foreach (var item in themesH17) 
        comboTheme.Items.Add(new ComboBoxItem() { Content = item }); 
       break; 
      case "Ete 2016": 
       comboTheme.Items.Clear(); 
       foreach (var item in themesE16) 
        comboTheme.Items.Add(new ComboBoxItem() { Content = item }); 
       break; 
      case "Hiver 2016": 
       comboTheme.Items.Clear(); 
       foreach (var item in themesH16) 
        comboTheme.Items.Add(new ComboBoxItem() { Content = item }); 
       break; 
      default: 
       break; 
     } 
} 

auch besser Änderungsschalter (Text) wechseln (Index), Fall missmatches und misstypes in Worte zu verhindern.
p.s. sorry für mein Englisch
Hinweis: Diese für WPF, nicht für WinForm Lösung

+0

Danke für Ihre Antwort, ich habe es versucht, aber es scheint, dass es eine Referenz fehlt, weil der Code nicht ausgeführt wird ... – Jay

+0

mit System.IO; – Sergio

+0

Tut mir leid, es funktioniert nicht – Jay

0

einfach alle Ihre List<string> von ObservableCollection<string> ändern

+0

Danke fürs Beantworten aber, das löst nicht den "AddRange" Fehler – Jay

+0

Oh ich dachte es klappt, du hast einen Fehler zur Laufzeit? Auf welcher Linie? – Safe

+0

Auf meinem eigenen Code ja kein Laufzeitfehler, nur zufällige Listen auf meinem 1. combobox ausgewählte Werte anzeigen, aber ich habe Laufzeitfehler mit sergio's Lösung @Safe – Jay

Verwandte Themen