【问题标题】:Get selected items from checkbox in a list - C# WPF从列表中的复选框中获取所选项目 - C# WPF
【发布时间】:2017-06-09 17:50:24
【问题描述】:

我构建了一个简单的视图模型,它填充了一个可观察的集合并以复选框的形式显示列表。我想获取“选中”的项目列表,如果未选中,当然要从列表中删除。调试显示正在选择的对象,但如何将此信息发送到列表以供进一步使用?

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

【问题讨论】:

    标签: c# wpf checkbox listbox


    【解决方案1】:

    感谢安迪。我将他的答案修改为

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

    以及访问组件:

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

    【讨论】:

      【解决方案2】:

      假设所有绑定设置正确,您应该能够通过查看MonthlyResults 中的项目来搜索所有选中的项目:

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

      那么checkedItems 将只包含被检查的项目。

      如果源文件不存在,则需要将using System.Linq; 添加到该源文件的顶部以供编译。

      【讨论】:

        猜你喜欢
        • 2011-09-25
        • 2015-10-20
        • 2011-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-17
        • 1970-01-01
        相关资源
        最近更新 更多