2012-11-14 14 views
6

Kiedy mój LongListSelector jest przewijany do dołu, chcę automatycznie ładować więcej danych z usługi sieciowej. Podobnie jak aplikacja Store. Mój problem polega na tym, że nie mogę znaleźć żadnego zdarzenia, które spowodowałoby ładowanie większej ilości akcji.Ciągła paginacja z LongListSelector

Odpowiedz

13

Zaleceniem firmy Microsoft jest użycie zdarzenia LongListSelector.ItemRealized, sprawdzenie, czy jest to ostatni element (lub ostatni element na liście), który ma zostać "zrealizowany", a jeśli tak, to zacznie pobierać nowe rekordy . Pod względem UX najlepiej jest pokazać ProgressIndicator na SystemTray w tym samym czasie i nie próbować naśladować iOS z wbudowanymi spinnerami.

LongListSelector.ItemRealized jest w rzeczywistości bardzo interesującym wydarzeniem, ponieważ jest uruchamiany, gdy element został powiązany z wirtualnym obiektem ListBoxItem. Oznacza to, że logika wirtualizacji LongListSelector uważa, że ​​musi przygotować element FrameworkElement do wyświetlenia na ekranie. ListBoxItem może, ale nie musi być na ekranie, ale jest to dobry sygnał, że się tam dostanie.

Dla próbki kodu patrz @http://code.msdn.microsoft.com/wpapps/TwitterSearch-Windows-b7fc4e5e

void resultListBox_ItemRealized(object sender, ItemRealizationEventArgs e) 
    { 
     if (!_viewModel.IsLoading && resultListBox.ItemsSource != null && resultListBox.ItemsSource.Count >= _offsetKnob) 
     { 
      if (e.ItemKind == LongListSelectorItemKind.Item) 
      { 
       if ((e.Container.Content as TwitterSearchResult).Equals(resultListBox.ItemsSource[resultListBox.ItemsSource.Count - _offsetKnob])) 
       { 
        Debug.WriteLine("Searching for {0}", _pageNumber); 
        _viewModel.LoadPage(_searchTerm, _pageNumber++); 
       } 
      } 
     } 
    } 
+0

idealny, dziękuję! –

+0

Cześć, co to jest _offsetKnob. – Noorul

+0

@ JustinAngel, To będzie ogień nad po raz pierwszy, kiedy ładuję kolekcję, w jaki sposób mogę przezwyciężyć ten scenariusz, ja obejrzałem próbkę kodu. dołączasz. – Eldho