【问题标题】:Implementing Search Efficiently in ListView UWP在 ListView UWP 中高效实现搜索
【发布时间】:2016-08-02 12:58:42
【问题描述】:

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

        var box = sender as AutoSuggestBox;
        var searchString = box.Text;
        labelFolder.ItemsSource = AllTags.Where(p => p.NAME.Contains(searchString));

这是好的做法吗?如果没有,是否有任何有效的方法可以做到这一点?

【问题讨论】:

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


    【解决方案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 有很多。

    【讨论】:

      猜你喜欢
      • 2012-04-19
      • 1970-01-01
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      相关资源
      最近更新 更多