【问题标题】:Databound ListView Multi-Select and Filtering数据绑定 ListView 多选和过滤
【发布时间】:2012-02-08 06:38:22
【问题描述】:

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

我有一个文本框,通过将它们的可见性绑定到描述是否包含键入的文本来动态过滤它们。这也绑定到 '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>

我的问题出现在以下场景中。假设我们有三个项目(Joe、Bob、Jacob)。

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

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

在此先感谢您的帮助。

【问题讨论】:

  • 你应该使用ICollectionView(见备注)。同样,谷歌“WPF ListView 过滤器”

标签: c# wpf data-binding


【解决方案1】:

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

对于正确的集合过滤,您应该使用CollectionViewSourceFilter 属性。这个问题的公认答案是如何完成的示例:Trigger Filter on CollectionViewSource

编辑

过滤速度慢的原因有很多。这个问题对您可以检查的事情有一些建议:WPF's ICollectionView.filter with large sets of data

如果这没有帮助,那么可能会在 SO 上提出另一个问题(您应该提供如何进行过滤和列表视图数据绑定的代码)。

【讨论】:

  • 我之前试过这个过滤器,结果很慢。以我的方式绑定它会使过滤基本上是即时的,而“过滤器”对于输入的每个字母都需要 10-15 秒。 - 我要再试一次,看看能不能让它更快地工作。谢谢。
  • 正如预期的那样,它可以工作,但速度很慢。也许我做错了什么?我觉得它很慢,因为它正在从数据模板重新创建每个项目,如果可见性更改会使所有项目都在内存中创建,并且只是更改一些属性。有什么帮助吗?
猜你喜欢
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多