在Windows Phone上分页数据/无限滚动

时间:2013-01-09 09:56:15

标签: c# windows-phone-7 windows-phone-8

我想知道在WindowsPhone Listbox控件上是否还有其他分页数据解决方案。 我习惯于通过手动检查滚动条位置来分页数据,当它到达屏幕末尾时,会加载更多数据。

我想问一下,有没有其他解决办法(更好)这样做(WP7或WP8)。我提到的解决方案与编写大量代码(自定义事件,滚动侦听器等)有关。我认为,可能有一个更简单的解决方案,因为WindowsPhone sdk 8.0已经发布......

2 个答案:

答案 0 :(得分:2)

WP8无限滚动的关键是LongListSelector控制和处理这两个事件:

ItemRealized(加载项)和ItemUnrealized(删除项)。

根据检测到的静态模板大小(高度)自动引发此事件。这是一种完全自动的按需操作。引擎“知道”何时应该获取新项目或删除旧项目。

必要的:

  1. 您必须手动设置模板大小。否则,同时加载的项目的计数是不可预测的。例如,如果模板中有图像,则不计入空格,除非它具有特定高度。
  2. List项目的ContentPresenters似乎正在回收。因此,如果您从代码中更改一个项目模板,您可以神奇地获取另一个项目的新模板! ;)所以......记住你的ItemTemplates并在每个ItemRealized事件上设置它,如果你需要两个或更多。
  3. 卸载BitmapImage数据非常麻烦。如果项目模板中有Image,则应手动将其缓存在ItemUnrealized事件上。并通过将Image.Source设置为null来销毁和重置绑定。并将原始源BitmapImage设置为具有最小decodepixelwidth / height的新的小型源(您不能将其置零)。我发现这是对抗内存泄漏的唯一方法。以下是详细信息https://stackoverflow.com/a/14225871/1449841
  4. 用于数据虚拟化的Binded集合可以根据您的需要大小(百万可以)。所以你应该绑定该集合一次,你唯一的业务将是通过提到的事件加载和卸载项目数据。

答案 1 :(得分:0)

您可以使用HorizontalCompressionVerticalCompression的VisualStatesGroup,以便您能够检测到ListBox底部的时间。< / p>

这已经存在,因为Mango不是新的WP8功能,但肯定听起来比你现在的&#34; hacky&#34;事件处理程序。

Read about it on MSDN Blog - "Windows Phone Mango change, Listbox: How to detect compression(end of scroll) states ?"

如果您不反对更改控件,Windows Phone Toolkit中有LongListSelector(请注意,这是WP8中的原生文件)certainly be a better way to approach the problem,&# 39;在链接文章中提到,这是做旧文章为芒果所做的新方法。