【问题标题】: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 看起来很困难,但是关于它的 topics 和 tutorials 有很多。