使用Powershell中的文本框过滤带有复选框的Listview

时间:2017-07-13 08:11:57

标签: wpf powershell xaml

我正在编写一个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
    }
}

此代码未正确过滤。你知道如何处理这个问题吗?

1 个答案:

答案 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上找到的代码来看,它应该是非常接近的。