WPF ListView中的快速筛选

时间:2014-04-22 04:12:37

标签: c# wpf listview

我们的项目中有一个快速过滤选项,当用户输入文字时说"测试"在文本框中,它过滤掉了带有3列匹配文本的WPF ListView(视图有7列)。问题是,ListView只需要更多的时间来过滤项目(例如3秒)。用户必须等待输入" est"单位过滤器完成" T"。这给用户带来了糟糕的体验。

ListView绑定到ObservableCollection<SomeItemViewModel>。我试图将可搜索的列保存在单独的Dictionary<string, string>中,其中值将是3个可搜索列的字符串concat。我的想法是从ObservableCollection中搜索每一列和每一行,而不是从Dictionary值过滤掉匹配的记录并填充Collection。这种方法效果不错,但仍然不尽如人意。

还有其他办法吗?

1 个答案:

答案 0 :(得分:1)

一种选择是在用户开始输入后不立即开始过滤。您可以做的是,在文本框的OnTextChanged事件中,启动一个具有非常小的Timespan的计时器,这对于用户来说是不可察觉的(以100毫秒为单位)。定时器时间跨度的到期将触发将开始过滤的事件。如果文本在计时器到期之前发生更改,请重置计时器。 仅在计时器到期时过滤文本。这将确保仅在用户完成键入要过滤的完整文本后才会进行过滤。