2017-06-28 26 views
2

私は、一連のチェックボックスで作成されたコンボボックスを持つプログラムを作成しています。 ユーザーは、必要なだけ多くのチェックボックスを選択できます。 tahtの後、彼がボタンをクリックすると、チェックボックスをチェックして、どれが選択されていないかを確認したい。コンボボックスのチェックボックスのリストからIsCheckedプロパティ値を取得します。

しかし、私はそれをどうやって行うのか分かりません。私は多くの方法を試みましたが、それらのどれも私に財産の価値を返しません。実際、私はコードからバインディングプロパティに到達することができません。ここでは、コードです:WPFで

:.csファイルファイルで

<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> 

、これはcombobxをロードするためのコードです:

メインクラスでは、この方法がある:

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

と要素のため、この二つのクラスもあります。

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; } 
     } 

    } 
は、

今、私が望むのは、コンボボックス内のすべてのチェックボックスについて、チェックボックスが選択されているかどうかを知る方法です。

私はこれを持っている、しかし、私は、プロパティ値を取得することinsisde置く何の指示を知らない:

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

私はこの

month_comboBox.Items[i] 
にsimilat何かを使用する必要があることを知っています

しかし、私はプロパティの値を取得するためにそれにフックする必要があるか分からない。

はあなたのすべて

+0

をチェックしてください持っています'Items [i]'を 'CheckBox'にキャストして' Checkedプロパティ 'にフックしようとしましたか? – CDove

+0

はい、私の問題は、month_comboBox.Items [i]からその内部のcheckBoxへの参照を取得できないことです。 month_comboBox.Items [i]を使用すると、ここからcheckBoxのIsCheckedプロパティにアクセスできないものが見つかりません。 –

+0

'MonthList'を見ると、あなたはMVVMの途中です。 MVVM素晴らしい世界では、 'CheckBox'や' ComboBox'を扱っていないので、適切なものを扱うことができます。月。ユーザーがボタンをクリックして「ICommand」が実行されると、 'Month'コレクションをチェックして、どの月が' IsSelected'であるかを調べるだけです。 – Sinatr

答えて

3

これは非常に簡単ですありがとうございました - このようにそれをキャスト:このような

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

または多分:

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

またMVVMhere

+0

あなたの最初の解決策は、ありがとうございます! –

関連する問題