我有一个AutoSuggestBox,在textchanged事件中,我每次更改文本时都会设置Listview的itemsSource。
31.07.2016
这是好习惯吗?如果没有,有没有有效的方法来做同样的事情?
答案 0 :(得分:1)
如果您的AllTags
将包含数千个元素 - 我认为这将是低效的。此外,可能在键盘上每次点击后都会发生TextChanged
事件并且数据重新加载非常频繁,这可能会降低您的应用。
在这种情况下,最好看一下Reactive Extensions。使用Rx,您可以在用户输入速度非常快时轻松延迟数据刷新并选择例如。 Where
结果的前20个元素。
var searchObservable = Observable.FromEventPattern(s => box.TextChanged += s, s => box.TextChanged -= s)
.Throttle(TimeSpan.FromMilliseconds(400))
.Select(result =>
{
var textBox = result.Sender as AutoSuggestBox;
return textBox.Text;
}
);
searchObservable
.DistinctUntilChanged()
.ObserveOnDispatcher()
.Subscribe(searchString =>
{
//Select elements from 'AllTags' here, this code will be launched with 400ms delay (throttle) when user is typing fast.
}
请注意,此示例非常通用,但您可以基于它。