我正在为 Windows 8 实现一个应用程序。它将从 xml 中搜索大量数据。
所以现在我使用文本框和列表视图来显示搜索结果,但是当我使用文本框事件时,TextChanged 会减慢输入速度,因为它会为输入的每个字母执行新搜索。
所以问题是,如何在地铁/现代用户界面中进行延迟,在输入几个字母后触发事件,而不是一个。
我正在为 Windows 8 实现一个应用程序。它将从 xml 中搜索大量数据。
所以现在我使用文本框和列表视图来显示搜索结果,但是当我使用文本框事件时,TextChanged 会减慢输入速度,因为它会为输入的每个字母执行新搜索。
所以问题是,如何在地铁/现代用户界面中进行延迟,在输入几个字母后触发事件,而不是一个。
不鼓励您将任何可能使 UI 陷入困境的同步任务运行。尝试将其作为后台任务运行,该任务会在完成时更新 UI。有关详细信息,请参阅后台任务和TimeTrigger。在任务完成时,使用Core Dispatcher 更新 UI。 核心调度程序示例
为什么不使用“离开”事件而不是文本框的文本更改事件?当用户在文本框中完成输入时,它会变得更流畅。
您不应创建自己的搜索体验。您应该挂接到 SearchPane 并在那里处理它。
SearchPane searchPane = SearchPane.GetForCurrentView();
searchPane.QuerySubmitted += searchPane_QuerySubmitted;
searchPane.SuggestionsRequested += searchPane_SuggestionsRequested;
然后,您可以在处理程序中根据需要处理事件。如果您正在提供建议,并且您的进程运行缓慢,并且会通过异步方式运行,那么您一定会得到延期。
void searchPane_SuggestionsRequested(SearchPane sender, SearchPaneSuggestionsRequestedEventArgs args)
{
var deferral = args.Request.GetDeferral();
// do real time type ahead here
deferral.Complete();
}
void searchPane_QuerySubmitted(SearchPane sender, SearchPaneQuerySubmittedEventArgs args)
{
// complete search here
}