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



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

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

_details.controlIDs.Clear();
foreach(Control item in lst_controls.Items)
{
if (item.IsChecked)
//Add item to list
_details.controlIDs.Add(item.controlID);
}

该代码是在选中/取消选中listbox中的任何checkboxes时激发的。它将每个item.IsChecked视为true,即使未选中它也是如此。

例如:选中列表中的顶部框,它会将其视为IsChecked = true,但它也会对列表中的其他控件执行此操作。

奇怪的行为——以前有人见过吗?

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

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

在您的UI中,为ListBox的ItemTemplate属性创建一个DataTemplate,其中包括一个绑定到IsSelected的CheckBox。

通过这种方式,您可以扫描数据项的集合(使用Linq或其他方法(,以找到那些被选中的数据项。

最新更新