Windows phone 7 当我向列表框中添加许多项时,我会得到OutOfMemoryException。如何修改它?
这是我的列表框: XMLA:Windows phone 7 当我向列表框中添加许多项时,我会得到OutOfMemoryException。如何修改它?,windows-phone-7,Windows Phone 7,这是我的列表框: XMLA: 代码隐藏: private void Button_Click(object sender, RoutedEventArgs e) { for (int i = 0; i < 50; i++) { MyData.Add(new Data { Name = i.ToString(), Img = "/Background.png" }); } } private
代码隐藏:
private void Button_Click(object sender, RoutedEventArgs e)
{
for (int i = 0; i < 50; i++)
{
MyData.Add(new Data { Name = i.ToString(), Img = "/Background.png" });
}
}
private void按钮\u单击(对象发送者,路由目标)
{
对于(int i=0;i<50;i++)
{
添加(新数据{Name=i.ToString(),Img=“/Background.png”});
}
}
当我点击更多按钮时,我得到一个OutOfMemoryException
但是,如果我不设置列表框样式。我将项目添加到列表框中,项目就可以正常工作。当您重新部署
列表框时,您将丢失数据虚拟化。因此,您的所有项目图像始终都在内存中。您能否减小映像的大小以避免高内存消耗?我想,要启用虚拟化,您应该更改ListBox ControlTemplate。将除ItemsPresenter之外的所有项目移出ScrollViewer:
<ControlTemplate TargetType="ListBox">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="100"/>
</Grid.RowDefinitions>
<ScrollViewer x:Name="ScrollViewer" Grid.Row="0">
<ItemsPresenter />
</ScrollViewer>
<Button Content="Add" Grid.Row="1" Click="Button_Click"/>
</Grid>
</ControlTemplate>
并确保MyData实现IList接口。噢。我的列表框必须有图像。你能告诉我如何重新部署我的列表框而不丢失数据虚拟化吗?你可以这样做的方法之一:删除“更多”按钮
并检测底部压缩状态以加载下一个项目我找到解决方案用户Scrollviewer和项目控件以组成ListBox@Ku6opr我认为虚拟化是通过虚拟化面板实现的,它与重新模板??MyData实现IList接口无关。将除ItemsPresenter之外的所有内容移出ScrollViewer。在这种情况下,虚拟化仍然是禁用的,也许值得为ListBox使用默认的ControlTemplate,并在ListBox附近放置“Add”按钮。感谢您发布本期文章,了解这些限制非常重要。我以前从未读过这方面的内容。如果编辑ListBox的样式,则ListBox将禁用虚拟化。
<ControlTemplate TargetType="ListBox">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="100"/>
</Grid.RowDefinitions>
<ScrollViewer x:Name="ScrollViewer" Grid.Row="0">
<ItemsPresenter />
</ScrollViewer>
<Button Content="Add" Grid.Row="1" Click="Button_Click"/>
</Grid>
</ControlTemplate>