2016-08-02 11 views
1

私はAutoSuggestBoxを持っていて、textchangedイベントでは、テキストが変更されるたびにListviewのitemsSourceを設定します。ListViewで効率的に検索を実装するUWP

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

これは良い方法ですか?そうでない場合、同じことを行う効率的な方法はありますか?

答えて

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がたくさんあります。

関連する問題