我有一个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或其他方法(,以找到那些被选中的数据项。