带有复选框的列表框-代码查看每个项目IsChecked = true

时间:2018-10-30 12:25:42

标签: c# .net wpf loops

我有一个WPF Listbox,其中包含checkboxes的列表,这些列表都被命名为另一个窗口中其他控件的名称。

通过抓取listbox中的每一项来循环lst_control.Items时:

_details.controlIDs.Clear();

foreach(Control item in lst_controls.Items)
{
    if (item.IsChecked)

    //Add item to list
    _details.controlIDs.Add(item.controlID);
}

checkboxes中的任何listbox进行检查/取消选中都会触发代码。即使未选中,它也会将每个item.IsChecked视为真实。

EG:选中列表顶部的框,它会显示为IsChecked = true,但对于列表中的所有其他控件也是如此。

奇怪的行为-有人看过吗?

1 个答案:

答案 0 :(得分:1)

即使您不打算使用完整的MVVM路线,也可以通过将应用程序中的UI和数据层分开来最好地解决此问题。

制作一个包含IsSelected布尔属性的数据项类,并将ListBox的ItemsSource设置为这些项的集合(例如ObservableCollection)。对于双向数据绑定,数据项类应实现INotifyPropertyChanged

在用户界面中,为ListBox的DataTemplate属性创建一个ItemTemplate,其中包括一个绑定到IsSelected的CheckBox。

通过这种方式,您可以扫描数据项的集合(使用Linq或其他方式)以查找选定的数据项。