簡體   English   中英

從列表中的復選框中獲取選定的項目-C#WPF

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM