Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 9
  • 87

WPF 4.5 wprowadził możliwość opóźnienia bindingu np. Property={Binding Value, Delay=...}. To podejście nie dotyczy WinRT.

Może ktoś wie, jak osiągnąć tę samą funkcjonalność w aplikacjach typu Windows Store App.

Chodzi mi przede wszystkim o obsługę TextBoksa lub Slidera. Może jest jakieś podejście generyczne do obsługi opóźnienia kontrolek w WinRT?

User_M
  • Zapytał
  • @ User_M | 03.07.2014
    • 15
    • 1
    • 5
Zaloguj się aby zadać pytanie
Pokrewne

Odpowiedź (1)

  • 3

Jeśli chcemy zachować wzorzec MVVM, proponuję użyć biblioteki Reactive Extensions w skrócie Rx: http://msdn.microsoft.com/en-us/data/gg577609.aspx.

Biblioteka ta umożliwia traktowanie zdarzeń (events) jako strumienia obiektów i przetwarzanie ich za pomocą języka Linq. To tak jakby zdarzenia, które zachodzą w aplikacji (np. ruchy myszką), zapisywać w bazie danych i później wyszukiwać i przetwarzać za pomocą Linqa, tylko że wszystko dzieje się w strumieniu, w czasie rzeczywistym.

Biblioteka opiera się na wzorcu projektowym Obserwator (Observer). Czyli z jednej strony wprowadzać dane, a z drugiej jest obserwator, które je filtruje i przetwarza. 

Przechodząc do twojego problemu, możemy zamienić zdarzenie PropertyChanged na obserwowalny strumień danych. Następnie podpinamy metodę (delegat) do wyszukiwania jako obserwatora. Aby uzyskać efekt opóźnienia, musimy zastosować metodę Throttle:

 

var observable = Observable.FromEvent<PropertyChangedEventArgs>(this, "PropertyChanged");
observable.Where(e => e.EventArgs.PropertyName == "SearchTerm").Throttle(TimeSpan.FromSeconds(.5)).ObserveOn(Deployment.Current.Dispatcher).Subscribe(e => Search());

 


Biblioteka Rx posiada ogromne możliwości, a przedstawione zastosowanie to tylko czubek góry lodowej. 

 

  • Odpowiedział
  • @ | 12.07.2014
  • TRENER ALTKOM AKADEMII