C# 在ListView UWP中高效实现搜索

C# 在ListView UWP中高效实现搜索,c#,xaml,win-universal-app,uwp,C#,Xaml,Win Universal App,Uwp,我有一个AutoSuggestBox,在textchanged事件中,每次文本更改时,我都会设置Listview的itemsSource var box = sender as AutoSuggestBox; var searchString = box.Text; labelFolder.ItemsSource = AllTags.Where(p => p.NAME.Contains(searchString)); 这是好的做法吗?如果没

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

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

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

如果您的
AllTags
将包含数千个元素,我认为这将是低效的。此外,每次点击键盘后,可能会启动
TextChanged
事件,并且数据重新加载非常频繁,这可能会降低应用程序的速度。 在这种情况下,查看被动扩展是一个好主意。使用Rx,当用户快速键入并选择
的前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看起来很难,但它有很多缺点