2013-08-21 27 views
1

我試圖用動態加載實現一個不定式可滾動列表。 (如http://blogs.windows.com/windows_phone/b/wpdev/archive/2012/10/01/how-to-create-an-infinite-scrollable-list-with-longlistselector.aspxLongListSelector WP8 ItemRealized -infinite可滾動列表-

  • 數據源是綁定到的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有一個交流中心的行爲,但實際上它的工作原理。它會在屏幕滾動前加載一堆元素,所以如果您看到10個元素,則ItemRealized會預加載30或40,直到您滾動到預加載更多項目爲止,然後才能到達列表末尾。如果你用100個元素測試它,你可以看到這種行爲。

+0

不知道爲什麼我沒試過這個......謝謝 – IntegerWolf

+0

我完全是這個問題中描述的情況,但是當我搜索「Smith」時,它發生了一個結果,以10個塊爲單位產生了100個項目,實現了項目保持射擊和全部100負載。 –