2017-06-28 3 views
2

Ich schreibe ein Programm, in dem ich eine Combobox aus einer Reihe von Kontrollkästchen haben. Der Benutzer kann so viele Kontrollkästchen auswählen, wie er möchte. Nachdem er auf einen Knopf geklickt hat, möchte ich die Kontrollkästchen aktivieren, um zu sehen, welche ausgewählt sind und welche nicht.Holen Sie sich die IsChecked Eigenschaft Wert aus einer Liste von Kontrollkästchen in einer Combobox

Aber ich habe keine Ahnung, wie das geht. Ich habe viele Möglichkeiten ausprobiert, aber nichts von ihnen gibt mir den Wert der Immobilie zurück. In der Tat bin ich nicht in der Lage, die Bindungseigenschaft vom Code zu erreichen. Hier ist der Code:

In WPF:

<ComboBox x:Name="month_comboBox" Margin="349,107,0,0" Height="22" VerticalAlignment="Top" Visibility="Hidden"> 
    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <CheckBox Width="20" IsChecked="{Binding Path=IsSelected, Mode=TwoWay}"/> 
       <TextBlock Text="{Binding Path=month_Name}" Width="100" /> 
      </StackPanel> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

In der CS-Datei, das ist der Code die combobx zu laden:

In der Hauptklasse gibt es diese Methode:

private void LoadMonths() 
    { 
     MonthList ML = new MonthList(); 
     month_comboBox.ItemsSource = ML.Months; 
     month_comboBox.SelectedIndex = 0; 
    } 

und es gibt auch diese zwei Klassen für die Elemente:

public class MonthList 
    { 
     ObservableCollection<Month> _Months = new ObservableCollection<Month>(); 

     public MonthList() 
     { 
      _Months.Add(new Month { month_Name = "every month" }); 
      _Months.Add(new Month { month_Name = "january" }); 
      _Months.Add(new Month { month_Name = "february" }); 
      _Months.Add(new Month { month_Name = "march" }); 
      _Months.Add(new Month { month_Name = "april" }); 
      _Months.Add(new Month { month_Name = "may" }); 
      _Months.Add(new Month { month_Name = "june" }); 
      _Months.Add(new Month { month_Name = "july" }); 
      _Months.Add(new Month { month_Name = "august" }); 
      _Months.Add(new Month { month_Name = "september" }); 
      _Months.Add(new Month { month_Name = "october" }); 
      _Months.Add(new Month { month_Name = "november" }); 
      _Months.Add(new Month { month_Name = "december" }); 
     } 

     public ObservableCollection<Month> Months { get { return _Months; } } 

    } 

    public class Month 
    { 
     private string monthName; 

     public bool IsSelected { 
      get { return IsSelected; } 
      set; 
     } 

     public string month_Name 
     { 
      get { return monthName; } 
      set { monthName = value; } 
     } 

    } 

Nun, was ich will ist eine Möglichkeit zu wissen, für jedes Kontrollkästchen in der Combobox, ob das Kontrollkästchen ausgewählt ist oder nicht.

Ich habe dies für, aber ich weiß nicht, welche Anweisung insisde es ausdrückte den Eigenschaftswert zu erhalten:

for (int i = 0; i < month_comboBox.Items.Count; i++) { 
    //Instruction missing here 
} 

Ich weiß, dass ich etwas verwenden similat dazu

month_comboBox.Items[i] 
haben

aber ich weiß nicht, was ich anhängen muss, um den Eigenschaftswert zu erhalten.

Vielen Dank

+0

Haben Sie haben versucht, 'Items [i]' an eine 'CheckBox' zu übergeben und an die' Checked-Eigenschaft' anzuknüpfen? – CDove

+0

Ja, aber mein Problem ist, dass ich keinen Verweis von der month_comboBox.Items [i] auf die CheckBox in ihm erhalten kann. Wenn ich month_comboBox.Items [i] verwende, kann ich nichts finden, was mich von hier aus zur IsChecked-Eigenschaft der CheckBox führt. –

+0

Wenn Sie 'MonthList' betrachten, befinden Sie sich auf halbem Weg in MVVM. In der wunderbaren Welt von MVVM beschäftigen Sie sich nicht mit "CheckBox" oder "ComboBox", sondern mit richtigen Dingen, z. Monate. Wenn der Benutzer auf die Schaltfläche klickt und der Befehl "ICommand" ausgeführt wird, können Sie einfach die Sammlung "Monat" überprüfen, um festzustellen, welche Monate "ausgewählt" sind. – Sinatr

Antwort

3

Diese ziemlich trivial ist - es so Stimmen:

public void GetValues() 
{ 
    foreach(var item in month_comboBox.Items) 
    { 
     Month temp = item as Month; 
     bool isSelected = temp.IsSelected; 
     //continue here :) 
    } 
} 

Oder Vielleicht wie:

public IEnumerable<Month> GetValues() 
    { 
     foreach(var item in month_comboBox.Items) 
     { 
      if(item is Month month) return month; 
     } 
    } 

Überprüfen Sie auch bitte MVVMhere

+0

Ihre erste Lösung funktioniert, danke! –

Verwandte Themen