更准确地替代LongListSelector.ItemRealized

时间:2014-02-12 19:12:51

标签: xaml windows-phone-8 longlistselector

我试图将两种方式(向上和向下)无限滚动列表添加到我的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?

我可以使用其他任何技术来实现这种功能吗?

1 个答案:

答案 0 :(得分:0)

您正在使用最佳方法。 LLS将在需要之前“实现”(创建/呈现)项目。这是一件好事。如果它们在屏幕上显示它们时必须实现它们,您会看到一个巨大的性能问题。

实现商品后,您可以添加更多商品。继续这样做,直到物品不再实现。

我建议获得超过五项,从服务器获得的结果数量非常少。