从以下代码开始
<Grid>
<ScrollViewer>
<ListView Name="listview" ItemsSource="{Binding Source={StaticResource list}}" />
</ScrollViewer>
</Grid>
我有很多关于1k项目的winrt应用程序列表。滚动需要太多时间,所以我已经实现了滚动到顶部和底部的功能。
listview.SelectedIndex
listview.UpdateLayout();
listview.ScrollIntoView(SelectedItem);
所有这些在ListView
中有大约1000个项目的模拟器上工作正常。但是当我使用Surface设备运行应用程序时,此方法不起作用。它实际上失败并在尝试渲染ListView
时绘制黑色矩形。
我刚刚浪费了两天时间。我尝试过很多东西,但没有运气。有人可以告诉我如何使用ScrollViewer
使用ListView
并在Surface设备上使用MVVM来处理长列表。只需在Surface设备上平滑滚动,列表超过1000,同时以编程方式从头到尾移动。
PS:实施搜索不是选项。
答案 0 :(得分:1)
您应该删除外部ScrollViewer,因为这会破坏虚拟化。除此之外,面板的大小有限,您可以滚动到大约200万像素高/宽。之后,您将看到渲染问题。
解决这个问题的唯一方法是相当复杂,并且需要从头开始编写自己的列表控件。我认为还没有人做过。通常,如果数据太大 - 人们会使用其他策略,例如分组和扩展组。