我正在编写一个Powershell应用程序,它有一个带有一堆复选框的列表视图。 所有GUI都是用XAML编写的。
我想要一个搜索文本框,即过滤复选框并显示与文本匹配的结果。
我想获得与此处相同的效果:Cmdlet Helper V2:https://learn-powershell.net/2012/12/02/powershell-and-wpf-listbox/
以下是我的示例代码:
$searcher.Add_TextChanged{(
AA
)}
function AA(){
if($searcher.Text -ne "")
{
foreach($item in $checkedListView.Items)
{
if ( $item.ToString() -imatch $searcher.Text.ToLower()) #tried also with -like, -eq etc.
{ }
else {
$checkedListView.Items.Remove($item)
break
}
}
if($checkedListView.SelectedItems.Count -eq 1)
{
$checkedListView.Focus()
}
}
else
{
Load
}
}
此代码未正确过滤。你知道如何处理这个问题吗?
答案 0 :(得分:1)
我没有太多使用PowerShell的经验,但我已经完成了很多WPF工作。
通常,在使用foreach
循环播放时,您无法修改集合。你必须使用反向循环。 (如果使用常规for循环,则在删除项目时将会搞砸索引。
您可以尝试这样的事情:
for($idx = $checkedListView.Items.Count - 1; $idx -ge $checkedListView.Items.Count; $idx++)
{
$item = $checkedListView[$idx];
if ( $item.ToString() -imatch $searcher.Text.ToLower()) #tried also with -like, -eq etc.
{ }
else {
$checkedListView.Items.Remove($item)
break
}
}
我还没有尝试过这段代码,但是从我在Google上找到的代码来看,它应该是非常接近的。