2017-01-24 10 views
0

観測可能なコレクションにデータを挿入し、リストをチェックボックスの形式で表示する単純なビューモデルを作成しました。私はチェックされている項目のリストを取得したいのですが、チェックしないとリストから削除されることはもちろんです。デバッグでは、選択されているオブジェクトが表示されますが、この情報をさらに使用するためにリストに送信するにはどうすればよいですか?リスト内のチェックボックスから選択項目を取得する - C#WPF

public class CheckBoxListItem 
{ 
    public bool Checked { get; set; } 
    public string Text { get; set; } 
} 

ObservableCollection<CheckBoxListItem> monthlyResults = 
    new ObservableCollection<CheckBoxListItem>(); 

public ObservableCollection<CheckBoxListItem> MonthlyResults 
{ 
    get { return monthlyResults; } 
    set 
    { 
     monthlyResults = value; 
     base.OnPropertyChanged("StringList"); 
    } 
} 

Dictionary<int, CheckBoxListItem> ResultsDict = new Dictionary<int, CheckBoxListItem>(); 
public List<string> outputlist = new List<string>(); 
public List<bool> outputyesnolist = new List<bool>(); 


outputlist.Add("Canon"); 
outputlist.Add("Sony"); 
outputlist.Add("Nikon"); 
outputyesnolist.Add(false); 
outputyesnolist.Add(false); 
outputyesnolist.Add(false); 

for (int j = 0; j < outputlist.Count; j++) 
{ 
    CheckBoxListItem list1 = new CheckBoxListItem(); 
    list1.Text = outputlist[j]; 
    list1.Checked = outputyesnolist[j]; 
    ResultsDict[j] = list1; 
} 

foreach (var value in ResultsDict.Values) 
{ 
    model.MonthlyResults.Add(value); 
} 

XAMLは次のように定義されています。すべてのバインディングが正しく設定されていると仮定すると、

private void CheckBox_Click(object sender, RoutedEventArgs e) 
{ 
    var cb = sender as CheckBox; 
    var item = cb.DataContext; 
    Listitems.SelectedItem = item; 
} 

答えて

2

としてCheckbox_Clickため

<ListBox x:Name="Listitems" Grid.Column="2" SelectionMode="Multiple" ItemsSource="{Binding MonthlyResults}" > 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <CheckBox Content="{Binding Text}" 
         IsChecked="{Binding Checked ,Mode=TwoWay}" 
         Click="CheckBox_Click"/> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

クリックセクション、すべてを検索することができるはずですチェックしたアイテムのうち、MonthlyResultsのアイテムを見て:

var checkedItems = MonthlyResults.Select(item => item.Checked); 

checkedItemsには、チェックされた項目のみが含まれます。

ソースファイルの先頭にusing System.Linq;を追加する必要があります。まだコンパイルしていない場合は、ソースファイルの先頭に追加する必要があります。

0

アンディさんに感謝します。

foreach(var obj in checkedItems1) 
{ 
    var hello = obj.Text; 
} 
:私は

var checkedItems1 = MonthlyResults.Where(B => B.Checked == true); 

として、アクセスコンポーネントに彼の答えを修正しました

関連する問題