2016-04-30 3 views
0

heißt So verwende ich externe API, die eine Klasse namens CatInfoType, die zum Beispiel Int-Nummer Catid und String Catname haben.Wie ändere ich comboBox Element Quelle, wenn diese comboBoxSelectionChanged -Eigenschaft WPF C#

Ich habe eine Combobox mit Eigenschaften

< ComboBox x:Name="listOfCategories_comboBox" ... SelectionChanged="listOfCategories_comboBox_SelectionChanged" DisplayMemberPath="catname" /> 

dann in Mainwindow cs-Datei Ich habe:

1) Liste dieser Klasse

List<CatInfoType> displayedCategories_List = new List<CatInfoType>(); 

2) in Konstruktor

 var comboBox = listOfCategories_comboBox as ComboBox; 
     comboBox.ItemsSource = displayedCategories_List; 

3) afte r einige Schaltfläche geklickt wird dann I-Werte von Combobox ausfülle:

  foreach (var item in allCategories_list) 
      { 
       if (item.catparent == 0) 
       { 
        displayedCategories_List.Add(item); 
       } 
      } 

Bis jetzt ist alles in Ordnung ist, aber ich möchte Combobox Artikel ändern, nachdem gleichen comboBoxSelectionChanged aufgerufen:

private void listOfCategories_comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 
     CatInfoType selectedCategory = listOfCategories_comboBox.SelectedItem as CatInfoType; 
     int selectedCategoryId = selectedCategory.catid; 
     int selectedCategoryParentId = selectedCategory.catparent; 

     displayedCategories_List.Clear(); 
     foreach (var item in allCategories_list) 
     { 
      if (item.catparent == selectedCategoryId) 
       displayedCategories_List.Add(item); 
     } 

     var comboBox = listOfCategories_comboBox as ComboBox; // I think those two lines are useless 
     comboBox.ItemsSource = displayedCategories_List; 
    } 

jedoch die Combobox Elemente werden nicht geändert. Ich habe versucht, es auf wenige Arten zu tun. Keines von ihnen hat das Ergebnis.

Wie kann ich das tun? Ändern Sie die ComboBox-Elemente "on live". Nach dem Drücken eines dieser Elemente möchte ich die Liste löschen und neue Elemente hinzufügen, die angezeigt werden sollen.

Ich hoffe Code oben und Beschreibung zeigt, was ich gerne tun würde. Wenn Sie Fragen haben, zögern Sie nicht zu fragen.

Antwort

1

versuchen Sie verwenden ObservableCollection<CatInfoType> statt List<CatInfoType>