2014-02-12 3 views
0

Im пытается добавить два пути (вверх & down) бесконечный список прокрутки в мое приложение WP8. Поэтому, когда список попадает в верхнюю часть, мы загружаем «меньшие» элементы из веб-api, и когда список заканчивается, мы загружаем «большие» элементы из веб-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, чтобы проверить, когда колонтитулы получает реализованы и загружать больше данных, основанных на этом.

Проблема в том, что я могу получить только 5 элементов из веб-api сразу, поэтому изначально список содержит 5 элементов. Это нормально, список проходит по экрану, так как мой шаблон элемента списка на самом деле довольно большой, и ни один нижний колонтитул или заголовок фактически не видны.

Но событие ItemRealized создается для каждого элемента, даже если они на самом деле не видны. Я думаю, проблема в том, что LongListSelector фактически загружает 10 (?) Элементов одновременно и повышает ItemRealized для всех из них?

Есть ли какие-либо другие методы, которые я могу использовать для достижения такой функциональности?

ответ

0

Вы используете лучший подход. LLS будет «реализовывать» (создавать/отображать) элементы, прежде чем они понадобятся. Это хорошая вещь. Если бы это было необходимо реализовать в тот момент, когда они шли по экрану, вы столкнулись бы с огромной проблемой производительности.

Когда ваши предметы реализованы, вы можете добавить больше предметов. Продолжайте делать это, пока элементы больше не будут реализованы.

Я бы предложил получить более пяти наименований, чтобы получить очень мало результатов для получения с сервера.

+0

В этом случае для пользователя достаточно 5 элементов в списке. Но было бы здорово, если бы пользователь мог просто прокручивать вверх/вниз, чтобы получить больше результатов. Совершенно из моих рук, что я сразу получаю только пять предметов с сервера. Конечно, я могу сделать несколько запросов, чтобы получить больше предметов ... – devha

+0

Что я действительно ищу, это решение, где я могу точно проверить, когда список (Listbox или longlistselector) попадает сверху или снизу. Затем я могу сделать веб-запрос и получить больше предметов. – devha

+0

Вы можете подключиться к ViewportControl, как это сделано в [этот пост] (http://visallylocated.com/post/2014/01/16/Synching-the-scroll-position-of-two-LongListSelectors.aspx) –