在WP8中的TextBox控件中输入更快

时间:2013-03-14 06:57:00

标签: c# silverlight windows-phone-7 windows-phone-8

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

2 个答案:

答案 0 :(得分:3)

  

有可能吗?

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

这样做的最简单方法可能是:

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

一个潜在的缺点是,如果用户键入“foo”,计时器启动,用户键入“d”然后删除“d”,然后定时器触发,它尽管有打字后的活动,它仍将执行搜索。 如果你认为这是不受欢迎的,你可以简单地维护一个计数器 - 只需int说明有多少次击键。在计时器启动时记住那个,并检查计时器何时触发计数是否与它相同。

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

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

答案 1 :(得分:0)

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