列表框所选项目包括所有项目



用户单击CheckedListBox中任意数量的项后,我希望在关闭窗口时以编程方式删除对这些项的检查。使用名为lstChoices的CheckedListBox,我有:

For I As Integer = 0 To lstChoices.SelectedItems.Count - 1
Dim lbi As Xceed.Wpf.Toolkit.Primitives.SelectorItem = CType(lstChoices.ItemContainerGenerator.ContainerFromIndex(I), Xceed.Wpf.Toolkit.Primitives.SelectorItem)
lbi.IsSelected = False
Next

问题是SelectedItems属性不是选定的项目。奇怪的是,SelectedItems.Count属性计算正确,但无论是否选中,循环都只是从第一个ListBoxItems一直到Count。

该文件称SelectedItems属性";获取选中项的集合"。要么是文档错误,要么是控件中存在错误。我怎样才能只得到检查过的项目。

当前正在Items集合上迭代,因为ContainerFromIndex返回基于Items属性而非SelectedItems属性的项。

您应该迭代SelectedItems并使用lstChoices.ItemContainerGenerator.ContainerFromItem

For index As Integer = 0 To lstChoices.SelectedItems - 1
Dim selectedItem = lstChoices.SelectedItems(index)
Dim selectedItemContainer = TryCast(lstChoices.ItemContainerGenerator.ContainerFromItem(selectedItem), Selector)
selectedItemContainer.IsSelected = False
Next

您必须小心区分SelectedItems和Items的元素。

试试这个:

For I As Integer = 0 To lstchoices.SelectedItems.Count - 1
lstchoices.SetItemCheckState(lstchoices.Items.IndexOf(lstchoices.SelectedItems(I)), CheckState.Unchecked)
Next

最新更新