我试图将两种方式(向上和向下)无限滚动列表添加到我的WP8应用程序中。因此,当列表命中率最高时,我们从web api加载“较小”的项目,当列表命中结束时,我们从web api加载“更大”的项目。
我最初的想法是使用这样的列表,页眉和页脚设置在屏幕上。
<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 :(得分:0)
您正在使用最佳方法。 LLS将在需要之前“实现”(创建/呈现)项目。这是一件好事。如果它们在屏幕上显示它们时必须实现它们,您会看到一个巨大的性能问题。
实现商品后,您可以添加更多商品。继续这样做,直到物品不再实现。
我建议获得超过五项,从服务器获得的结果数量非常少。