在windows phone中重复使用flipview中的视图

时间:2014-09-07 23:23:36

标签: c# windows-phone-8.1 windows-rt

我有一个用户控件FooUserControl,它在BarObject上有一个DataContext绑定。此BarObject是在运行时从另一个对象FooBarObject创建的。 使用FlipView我可以做这样的事情

<DataTemplate>
    .....
</DataTemplate>

<FlipView  ItemsSource="{Binding BarObjectList}" ItemTemplate="{StaticResource FooUserControl}">
</FlipView>

根据我的理解,如果BarObjectList中有100个项目,这将创建100个FooUserControl实例,并将BarObject分配给每个实例作为其DataContext

在我看来这是非常低效的,因为现在我有100个物体漂浮在周围。 100也可以是1000.我有两个问题

  1. 有更好的方法吗?理想情况下,我希望存在1个或最多3个对象(1. previous,2。current和3. next),并且在每个滚动上只需在用户控件上重新分配datacontext。有没有办法实现这个目标?如果这是答案,我将如何使用DataTemplateSelector?
  2. 我知道翻转视图不适合1000个对象。最好有this建议的列表视图。还有其他建议吗?

1 个答案:

答案 0 :(得分:0)

如果你想做上一个,当前的,接下来的事情,那么你最好需要将它数据绑定到整个数据集的一个子集。因此,您需要跟踪您在该数据集中的位置,并返回仅包含3个项目的列表。然后你需要知道何时更改这个索引值,你可以使用所述UI元素中的SelectionChanged事件进行一些聪明的数学运算。

当您想要显示大量数据项时,ListView可能是您最好的选择。当您位于列表底部时,还有许多教程可以加载额外的项目,因此您不必一次加载整个数据集。

但严肃地说,我认为您需要重新考虑如何向用户显示数据。应该很少出现您希望用户缩减1000多个元素的情况。您的数据源中应该有一些过滤。

查看<ColletionViewSource>,了解过滤数据集的简便方法。

ColletionViewSource MSDN Link