电子节目指南(EPG)XAML

时间:2014-12-29 15:17:30

标签: wpf xaml windows-phone-7 windows-phone-8 windows-runtime

有没有办法使用XAML为WinPhone / WinRT实现EPG?我看到很多iOS / Android / Web应用程序正在这样做,但不是WP或WinStore。

  1. 它应该支持大量的项目(500个频道,每个N个节目,其中N是一周内节目的数量)
  2. 内部可能存在间隙,例如某些程序缺失或整行没有数据,但仍应显示空(透明)行。
  3. 每行中的项目数总是不同的(这就是EPG的工作原理)
  4. 加载速度快,滚动平滑。
  5. 内存使用应该是正常的,应用程序不应该因许多绘制的视图而崩溃,即元素需要虚拟化(重用)
  6. GridView看起来类似,但有一些问题:

    • 使项目大小不同 - 需要将itemsPanel切换到VariableSizedWrapGrid,这不支持虚拟化。有一些尝试可以解决此问题,例如this但不是本机/测试/广泛使用的解决方案
    • 不确定即使使用VariableSizedWrapGrid也可以支持间隙和缺少内容,看起来GridView会在任何情况下填补空白元素(创建空透明项目听起来像脏黑客)
    • 很多项目都会出问题,需要以某种方式进行增量加载
    • 内存使用/性能下降看起来不错

    有人实施了这个吗?这有什么组件/指南吗?哪个xaml控件允许这样以及如何显示性能/内存/时间?

1 个答案:

答案 0 :(得分:0)

我不久前为UWP做了一个xaml epg,在经过大量的POC之后,我使用了一个带有ScrollViewer的简单网格,其中的列和行是从后面的代码动态生成的(大部分代码都在代码背后)和几个ListView

我们还编写了自己的数据虚拟化(因为Grid不支持虚拟化)......

WinRT XAML工具包 - 非常方便

这不是一项简单的任务,但它是合法的:)

假设您有一些EPG数据模型,例如 - 列表(每个频道都有一个节目列表)

我做了什么 - 我在ScrollViewer中创建了一个空的Grid,然后我为每个通道关联了一个RowDefinition,然后将其添加到网格中(按通道索引)。

传播节目 - 更复杂(因为有些节目时间重叠)。我将每个程序作为Border元素添加到通道RowDefinitios中 - 通过 Margin to Time 计算它。

数据虚拟化 - 我所做的是计算用户可见的时间段(一个Rect类型的ViewPort)然后,当用户滚动时 - 我只加载了那些程序/通道与viewPort相交。例如,如果用户从14:00-18:00查看EPg,我不会将18:05程序加载到视图中。

选择程序(扩展以获取详细信息) - 您可以在选择时简单地设置所选程序的宽度及其RowDefinition。

  • 这里的主要问题是键盘novigation(实现起来真的很难)但是如果你触摸/鼠标导向那么你的导航问题就解决了。