[英]Get selected items from checkbox in a list - 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定義為:
<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>
單擊部分的Checkbox_Click
為
private void CheckBox_Click(object sender, RoutedEventArgs e)
{
var cb = sender as CheckBox;
var item = cb.DataContext;
Listitems.SelectedItem = item;
}
假設所有綁定設置正確,那么您應該能夠通過查看MonthlyResults
中的項目來搜索所有選中的項目:
var checkedItems = MonthlyResults.Select(item => item.Checked);
然后, checkedItems
將僅包含已檢查的項目。
您將需要using System.Linq;
添加using System.Linq;
如果尚不存在,則將其復制到源文件的頂部。
感謝安迪。 我將他的答案修改為
var checkedItems1 = MonthlyResults.Where(B => B.Checked == true);
並訪問組件:
foreach(var obj in checkedItems1)
{
var hello = obj.Text;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.