3

在我的 WP8 应用程序中,我使用了一种搜索方法,当 TexBox 中的文本发生变化时进行搜索。现在我需要修改这个搜索。当用户在 TextBox 中快速键入时,搜索应仅在用户键入后执行。也就是说,不应该对每个更改的文本执行搜索方法。可能吗?请帮助我

4

2 回答 2

3

可能吗?

绝对地。您基本上需要一个计时器 - 或者更确切地说,每次击键都有一个计时器。

最简单的方法可能是说:

  • 每次用户敲击一个键,启动一个计时器。计时器应该记住此时已经输入的文本。
  • 当计时器触发时,如果当前文本与“计时器开始点的文本”相同,则执行搜索。

这样做的一个潜在缺点是,如果用户键入“foo”,则计时器启动,用户键入“d”,然后删除该“d”,然后触发计时器,尽管有键入后的活动,它仍将执行搜索. 如果您认为这是不可取的,您可以简单地维护一个计数器 - 只是int说明有多少击键。请记住计时器何时启动,并检查计时器何时触发,计数是否与之前相同。

或者,假设搜索是异步且廉价的,则在每次击键时开始搜索......但是当您返回结果时,如果用户从那时起输入,则完全忽略搜索,或者将结果过滤到本地对新的查询文本仍然有效。

(可以使用单个计时器来解决问题,这样当用户键入计时器时计时器启动触发时间延迟。我个人认为我会发现这更复杂,但这取决于你。)

于 2013-03-14T07:05:39.133 回答
0

您可以考虑使用Reactive 扩展库,它是一种异步通信方式,并且对异步活动提供了很多抽象。它是一种基于推送的机制,即只要数据可用,就会通知感兴趣的订阅者。它支持取消问题请求等。例如,请参阅101 Rx

于 2013-03-14T07:15:51.290 回答