我有一个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
,但对于列表中的所有其他控件也是如此。
奇怪的行为-有人看过吗?
答案 0 :(得分:1)
即使您不打算使用完整的MVVM路线,也可以通过将应用程序中的UI和数据层分开来最好地解决此问题。
制作一个包含IsSelected布尔属性的数据项类,并将ListBox的ItemsSource
设置为这些项的集合(例如ObservableCollection
)。对于双向数据绑定,数据项类应实现INotifyPropertyChanged
。
在用户界面中,为ListBox的DataTemplate
属性创建一个ItemTemplate
,其中包括一个绑定到IsSelected的CheckBox。
通过这种方式,您可以扫描数据项的集合(使用Linq或其他方式)以查找选定的数据项。