2014-02-12 61 views
0

我試圖添加兩種方式(向上&下)無限滾動列表到我的WP8應用程序。所以當列表頂部時,我們加載web api中的「小」項,當列表命中結束時,我們加載web api中的「更大」項。更精確的替代LongListSelector.ItemRealized

我最初的想法是使用這樣的列表,頁眉和頁腳設置在屏幕上。

 <phone:LongListSelector x:Name="List" ItemsSource="{Binding Routes}" Margin="0,0,0,-90" ItemRealized="listBox_ItemRealized"> 
      <phone:LongListSelector.ListHeader> 
       <Grid Margin="12,-90,12,30" Height="60" VerticalAlignment="Top"> 
        <StackPanel VerticalAlignment="Center"> 
         <TextBlock Text="Load more" /> 
        </StackPanel> 
       </Grid> 
      </phone:LongListSelector.ListHeader> 

      <phone:LongListSelector.ListFooter> 
       <Grid Margin="12,30,12,0" Height="60" VerticalAlignment="Bottom"> 
        <StackPanel VerticalAlignment="Center"> 
         <TextBlock Text="Load more" /> 
        </StackPanel> 
       </Grid> 
      </phone:LongListSelector.ListFooter> 

      <phone:LongListSelector.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Margin="12,8" Background="#FFd3dae8" Width="456"> 
         <TextBlock Text="{Binding item}" /> 
        </StackPanel> 
       </DataTemplate> 
      </phone:LongListSelector.ItemTemplate> 
     </phone:LongListSelector> 



    void listBox_ItemRealized(object sender, ItemRealizationEventArgs e) 
    { 
     if (e.ItemKind == LongListSelectorItemKind.ListHeader) 
     { 
      // Get smaller items 
     } 

     else if (e.ItemKind == LongListSelectorItemKind.ListFooter) 
     { 
      // Get bigger items 
     } 
    } 

然後我可以使用ListBox.ItemRealized檢查時頁眉或頁腳被實現和加載基於更多的數據。

問題是我一次只能從web api獲取5個項目,所以最初列表包含5個項目。沒關係,該列表在屏幕上顯示,因爲我的列表項目模板實際上相當大,並且實際上看不到頁腳或標題。

但是,爲每個元素引發ItemRealized事件,即使它們實際上不可見。我認爲問題是LongListSelector實際上一次加載10個(?)項目並且爲它們引發ItemRealized?

是否有任何其他技術可以用來實現這種功能?

回答

0

您正在使用最佳方法。 LLS將在需要之前「實現」(創建/渲染)項目。這是一件好事。如果它們在屏幕上出現時必須意識到這一點,則會看到巨大的性能問題。

當您的物品被實現時,您可以添加更多物品。繼續這樣做直到物品不再被實現。

我會建議獲得超過五個項目,它從服務器獲得的結果數量非常少。

+0

在這種情況下,通常列表中的5項足夠用戶使用。但是,如果用戶可以向上/向下滾動以獲得更多結果,那將會很棒。從我的手中,我一次只能從服務器獲得五件物品。當然,我可以提出多個請求來獲得更多的項目... – devha

+0

我真正想要的是解決方案,我可以準確地檢查列表(Listbox或longlistselector)頂部或底部的位置。然後,我可以提出網絡請求並獲得更多項目。 – devha

+0

你可以像[本文]中所做的那樣掛鉤到ViewportControl中(http://visuallocated.com/post/2014/01/16/Synching-the-scroll-position-of-two-LongListSelectors.aspx) –