C# 在ListView UWP中高效实现搜索
我有一个AutoSuggestBox,在textchanged事件中,每次文本更改时,我都会设置Listview的itemsSourceC# 在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)); 这是好的做法吗?如果没
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看起来很难,但它有很多缺点