我写一个Windows应用程序8.1,我现在用了很长的GridView
。我正在使用UI虚拟化,而视图模型包含一个包含100K项目的可观察集合。ItemsWrapGrid隐藏物品通过偏移
<GridView ItemsSource="{Binding Items}">
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<ItemsWrapGrid Orientation="Vertical"/>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
<GridView.ItemTemplate>
<DataTemplate>
<Border
Background="LightBlue"
Height="200" Width="200"
>
<TextBlock
Text="{Binding Index}"
VerticalAlignment="Center" HorizontalAlignment="Center"
FontSize="30"
/>
</Border>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
当使用默认项面板(ItemsWrapGrid)和朝列表的末尾滚动,在某一时刻开始的项目消失。
我与物品的各种大小进行了测试,并削波总是开始于同一滚动偏移量(约200万个像素)。当我用WrapGrid替换面板时,错误不会发生。据我所知,ItemsWrapGrid
具有更好的虚拟化,并想使用它,但这个错误当然是不能接受的。
有没有解决这个错误的方式,同时仍使用ItemsWrapGrid
?
我可以看看,你可以分享你的代码? – ezaspi
该问题包含您需要的所有代码。只需将数据上下文设置为包含名为Items的属性的任何类,其中包含1000000个对象,您将看到它。 –
视图尝试呈现时,内存不足。也就是说,在我的Observable集合被填充并且xaml视图开始显示之后,我得到System.OutOfMemoryException。你是否正在做任何事情来避免OutOfMemoryException? – ezaspi