在ListView UWP中高效实现搜索

时间:2016-08-02 12:58:43

标签: c# xaml win-universal-app uwp

我有一个AutoSuggestBox,在textchanged事件中,我每次更改文本时都会设置Listview的itemsSource。

31.07.2016

这是好习惯吗?如果没有,有没有有效的方法来做同样的事情?

1 个答案:

答案 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.
    }

请注意,此示例非常通用,但您可以基于它。

乍一看,Rx看起来很难,但有很多关于它的topicstutorials