2013-08-21 5 views
1

Я пытаюсь реализовать бесконечно прокручиваемый список с динамической нагрузкой. (Как http://blogs.windows.com/windows_phone/b/wpdev/archive/2012/10/01/how-to-create-an-infinite-scrollable-list-with-longlistselector.aspx)LongListSelector WP8 ItemRealized -infinite scrollable list-

  • источник данных связан с ObservableCollection

  • Заполнение списка начинается с добавления элементов в коллекцию

  • ItemRealizedEvent начинает дальнейшие пломбы на ObservableCollection

Я думал, что t он ItemrealizedEvent запускается прокруткой НО, но он всегда срабатывает после добавления элементов в коллекцию для каждого элемента.

-> Таким образом, ее не динамический, он просто загружает все

любые идеи?

В PageClass:

within the Constructor: 
(...) 
LLS_BooksListAll.DataContext = _viewModel.SearchAllViewModel; 
LLS_BooksListAll.ItemsSource = _viewModel.SearchAllViewModel.MediumCollection; 
(...) 

private async void LLS_BooksListAll_ItemRealized(object sender, ItemRealizationEventArgs e) 
{ 
    if ((LLS_BooksListAll.ItemsSource as ObservableCollection<Medium>) == null) return; 

    //get number of loaded items 
    int currentItemsCount = (LLS_BooksListAll.ItemsSource as ObservableCollection<Medium>).Count; 

    if (!_viewModel.SearchAllViewModel.IsLoading && currentItemsCount >= _offsetKnob && 
     (e.Container.Content as Medium) != null) 
    { 
     if ((e.Container.Content as Medium).Equals((LLS_BooksListAll.ItemsSource as 
      ObservableCollection<Medium>)[currentItemsCount - _offsetKnob])) 
     { 
      _pageNumberAll++; 
      try 
      { 
       await _viewModel.SearchAllViewModel.SearchAll(TB_Search.Text, _pageNumberAll); 
      } 
      catch (RestException ex) 
      { 
       MessageBox.Show("Connection-Error: LLS_BooksListAll_ItemRealized - " + ex.Message); 
      } 
     } 
    } 
} 

В ViewModelClass:

public async void SearchAll(string searchword, int pageNumber) 
    { 
     if (pageNumber == 1) this.MediumCollection.Clear(); 
     IsLoading = true; 
     SearchRequest search = new SearchRequest(); 
     String responseString = await search.Get(searchword, SearchRange.all, pageNumber); 
     MediaUser response = JsonConvert.DeserializeObject<MediaUser>(responseString); 
     foreach (Medium med in response.media) 
     { 
      MediumCollection.Add(med); //Filling the observable collection 
     } 
     IsLoading = false;    
    }  

ответ

1

ItemRealized имеют поведение extrange, но на самом деле это работает. Он предварительно загружает кучу elementos перед прокруткой экрана, поэтому, если вы видите 10 элементов, ItemRealized preload 30 или 40 и остановите, пока вы не прокрутите до предварительно загружаемых элементов, прежде чем вы достигнете конца списка. Если вы проверите его на 100 элементов, вы увидите это поведение.

+0

Не знаю, почему я не пробовал это ... СПАСИБО – IntegerWolf

+0

У меня точно такая ситуация описана в вопросе, но когда я ищу «Смит», который, как это происходит, дает результат, ограниченный 100 пунктами в кусках 10, itemrealized держит стрельбу и все 100 нагрузки. –

Смежные вопросы