列表框多重选择通过代码c#在WPF
本文关键字:代码 WPF 选择 列表 | 更新日期: 2023-09-27 18:05:55
这是我的程序的一部分,我有一个sql字符串和一个列表框,我想在列表框中选择那些存在于字符串中的项目。
但问题是:只有最后一个项目将被我的代码选中!
此外,我使用WPF . net 4.5,没有ListboxItem。选择属性还有listBox1.GetItemText!
MYlistbox.SelectionMode=SelectionMode.Multiple;
foreach (var item in MYlistbox.items)
{
If(Mystring.Contains(item.ToString()))
{
MYlistbox.SelectedValue=item.ToString();
}
}
Items
集合中的项目是项目数据,而不是ListBoxItem
,您应该使用ItemContainerGenerator
来获取ListBoxItem容器,并使用IsSelected
属性:
foreach (var item in MYlistbox.items){
if(Mystring.Contains(item.ToString())) {
var lbItem = MYlistbox.ItemContainerGenerator.ContainerFromItem(item) as ListBoxItem;
if(lbItem != null){
lbItem.IsSelected = true;
}
}
}
还要注意,ItemContainerGenerator
只在项目被加载和呈现时才起作用。遗憾的是,ListBox也默认使用VirtualizingStackPanel
。因此,代码片段仅适用于可见项(隐藏项不会呈现任何容器)。如果您的列表框不包含大的集合,可能不需要虚拟化,那么您可以像这样禁用虚拟化:
VirtualizingStackPanel.SetIsVirtualizing(MYlistbox, false);
MYlistbox.UpdateLayout();//this is very important
如果继续使用虚拟化,我认为你必须以某种方式绑定IsSelected
到你的viewModel使用绑定与一些转换器。这种方法更复杂,但对MVVM更友好(如果您熟悉MVVM,应该这样做)。
for (int i=0, i< MYlistbox.Items.Count;i++)
{
if(Mystring.Contains(MYlistbox.Items[i].ToString()))
{
MYlistbox.SelectedItems.Add.(MYlistbox.Items[i]);
}
}