Databound ListView多选和筛选

本文关键字:筛选 ListView Databound | 更新日期: 2023-09-27 18:20:14

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

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

ListBoxItems的DataTrigger:

            <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"不可见。如果在应用过滤器之前选择了所有三个,则同样适用。

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

提前感谢您在这里提供的任何帮助。

Databound ListView多选和筛选

ListView将为集合中的每个对象创建一个ListViewItem。可见性设置为隐藏并不意味着项目不在列表视图中。当您切换选择项目时,它会选择两者之间的所有项目,其中包括"Bob"(可见或不可见)。

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

编辑

您的筛选可能很慢,原因有很多。这个问题对你可以检查的事情有一些建议:WPF';s ICollectionView.filter与大数据集

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