【问题标题】:More accurate alternative to LongListSelector.ItemRealizedLongListSelector.ItemRealized 的更准确替代方案
【发布时间】: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


    【解决方案1】:

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

    当您的项目实现后,您可以添加更多项目。继续这样做,直到项目不再实现。

    我建议获取五个以上的项目,从服务器获取的结果数量非常少。

    【讨论】:

    • 在这种情况下,通常列表中的 5 项对用户来说就足够了。但是,如果用户可以向上/向下滚动以获得更多结果,那就太好了。我一次只能从服务器获得五件物品,这完全不在我的掌控之中。当然,我可以提出多个请求来获取更多物品...
    • 我真正寻找的是解决方案,我可以准确地检查列表(列表框或长列表选择器)何时到达顶部或底部。然后我可以发出网络请求并获取更多项目。
    • 你可以像this post中那样挂钩到ViewportControl
    猜你喜欢
    • 1970-01-01
    • 2014-09-27
    • 2012-01-11
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 2016-02-29
    • 2012-09-27
    • 1970-01-01
    相关资源
    最近更新 更多