【发布时间】:2014-02-14 02:36:32
【问题描述】:
我正在尝试向我的 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?
我可以使用其他技术来实现这种功能吗?
【问题讨论】:
标签: xaml windows-phone-8 longlistselector