C# 数据绑定ListView多选和筛选

C# 数据绑定ListView多选和筛选,c#,wpf,data-binding,C#,Wpf,Data Binding,我有一个数据绑定项的列表 我有一个文本框,通过将它们的可见性绑定到描述是否包含键入的文本来动态过滤它们。这还绑定到“focusable”属性,以删除由于筛选器而不可见的选定项 ListBoxItems的数据触发器: <DataTrigger Value="False"> <DataTrigger.Binding> <MultiBinding Converter="{Sta

我有一个数据绑定项的列表

我有一个文本框,通过将它们的可见性绑定到描述是否包含键入的文本来动态过滤它们。这还绑定到“focusable”属性,以删除由于筛选器而不可见的选定项

ListBoxItems的数据触发器:

            <DataTrigger Value="False">
                <DataTrigger.Binding>
                    <MultiBinding Converter="{StaticResource filterToBoolean}">
                        <Binding Path="Description" />
                        <Binding ElementName="txtFilter" Path="Text" />
                    </MultiBinding>
                </DataTrigger.Binding>
                <Setter Property="Visibility" Value="Collapsed" />
                <Setter Property="Focusable" Value="False" />
            </DataTrigger>

我的问题出现在以下场景中。假设我们有三个项目(乔、鲍勃、雅各布)

如果我们在过滤器中输入'J',然后选择'Joe'并按住Shift键并单击'Jacob',将选择三个项目(全部),即使“Bob”不可见。如果在应用过滤器之前选择了这三个选项,则同样适用

我在这里找到了一个试图解决这个问题的例子,但是,它并不完全有效。如果在应用过滤器之前选择了项目,则会应用该选项,但如果在应用过滤器之后选择,则会出现相同的问题


提前感谢您在此提供的帮助。

列表视图将为集合中的每个对象创建一个
ListViewItem
。可见性设置为隐藏并不意味着该项不在listview中。当您按住Shift键选择项目时,它会选择两个项目之间的所有项目,包括“Bob”(可见或不可见)

要进行正确的集合筛选,应使用
CollectionViewSource
Filter
属性。如何做到这一点的示例是该问题的公认答案:

编辑

过滤速度慢的原因有很多。这个问题对您可以检查的事项有一些建议:


如果这样做没有帮助,那么可以问另一个问题(您应该提供如何进行筛选和listview数据绑定的代码)。

您应该使用(请参见备注)。此外,谷歌“WPF ListView过滤器”我以前尝试过这个过滤器,结果速度非常慢。以我的方式绑定它会使过滤基本上是即时的,而“过滤器”则会为每个键入的字母花费10-15秒。-我打算再试一次,看看是否能更快地让它工作。谢谢。正如所料,它可以工作,但速度很慢。也许我做错了什么?我觉得它很慢,因为它正在从datatemplate中重新创建每个项,如果可见性更改会将所有项都保留在内存中,并且只更改一些属性。有什么帮助吗?