Rozszerzenia reaktywne pozwalają mi "obserwować" strumień wydarzeń. Na przykład, gdy użytkownik wpisuje swoje zapytanie wyszukiwania w okienku wyszukiwania Windows 8, sugestie SugestieRequested są nieustannie podnoszone (dla każdej litery). Jak mogę wykorzystać rozszerzenia reaktywne do ograniczenia żądań?Jak korzystać z rozszerzeń reaktywnych do dławienia parametru SearchPane.SuggestionsRequested?
coś takiego:
SearchPane.GetForCurrentView().SuggestionsRequested += (s, e) =>
{
if (e.QueryText.Length < 3)
return;
// TODO: if identical to the last request, return;
// TODO: if asked less than 500ms ago, return;
};
Rozwiązanie
System.Reactive.Linq.Observable.FromEventPattern<Windows.ApplicationModel.Search.SearchPaneSuggestionsRequestedEventArgs>
(Windows.ApplicationModel.Search.SearchPane.GetForCurrentView(), "SuggestionsRequested")
.Throttle(TimeSpan.FromMilliseconds(500), System.Reactive.Concurrency.Scheduler.CurrentThread)
.Where(x => x.EventArgs.QueryText.Length > 3)
.DistinctUntilChanged(x => x.EventArgs.QueryText.Trim())
.Subscribe(x => HandleSuggestions(x.EventArgs));
Install RX dla WinRT: http://nuget.org/packages/Rx-WinRT/ Dowiedz się więcej: http://blogs.msdn.com/b/rxteam/archive/2012/08/15/reactive-extensions-v2-0-has-arrived.aspx
@ JerryNixon-MSFT Och, przepraszam za to :) Pojawiło się, kiedy przeglądałem ... Cieszę się, że miałem rację. –