C# 包含100多个项目的列表框崩溃
我正在使用windows phone 8应用程序 我有200多个项目的列表框显示C# 包含100多个项目的列表框崩溃,c#,windows-phone-8,listbox,windows-phone,listboxitems,C#,Windows Phone 8,Listbox,Windows Phone,Listboxitems,我正在使用windows phone 8应用程序 我有200多个项目的列表框显示 <DataTemplate x:Key="DataTemplate1"> <Grid VerticalAlignment="Center" HorizontalAlignment="Center"> <Grid.RowDefinitions> <RowDefinition/>
<DataTemplate x:Key="DataTemplate1">
<Grid VerticalAlignment="Center" HorizontalAlignment="Center">
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Border Grid.Row="0" Background="White" Height="400" Width="400" CornerRadius="30,30,30,30">
</Border>
<Grid Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Top">
<TextBlock HorizontalAlignment="Center"
VerticalAlignment="Center"
Margin="5,20,5,5"
Foreground="#000000"
Text="{Binding Title}"/>
</Grid>
</Grid>
</DataTemplate>
我怎样才能解决这个问题
更新:
<ItemsPanelTemplate x:Key="ItemsPanelTemplate">
<local:CollectionFlowPanel ItemHeight="400"
ItemWidth="400"
FocusedItemOffset="120"
UnfocusedItemOffset="20"
ItemVisibility="5">
<VirtualizingStackPanel />
</local:CollectionFlowPanel>
</ItemsPanelTemplate>
</phone:PhoneApplicationPage.Resources>
<Grid x:Name="LayoutRoot" Background="#000000">
<local:CollectionFlow x:Name="ListBoxItems"
ItemTemplate="{StaticResource DataTemplate}"
ItemsPanel="{StaticResource ItemsPanelTemplate}"/>
</Grid>
你的物体有多大?如果对象太大,则可能无法同时加载所有对象。请确保列表框的ItemsPanelTemplate中有VirtualzingStackPanel
以下是列表框可能需要的XAML:
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
您是否尝试使用for循环
public List<Fellow> fellowList { get; set; }
private void PhoneApplicationPage_Loaded(object sender, System.Windows.RoutedEventArgs e)
{
fellowList = new List<Fellow>();
for (int i = 0; i < 2; i++)
{
Fellow fellow = new Fellow();
fellow.x = "B" + i;
fellow.value = "B Value" + i;
fellowList.Add(fellow);
}
this.DataContext = this;
ListBoxItems.ItemsSource = fellowList;
}
public class Fellow
{
public string x { get; set; }
public string value { get; set; }
}
公共列表fellowList{get;set;}
已加载专用void PhoneApplicationPage_(对象发送方,System.Windows.RoutedEventArgs e)
{
fellowList=新列表();
对于(int i=0;i<2;i++)
{
同事=新同事();
fellow.x=“B”+i;
fellow.value=“B value”+i;
同伴列表。添加(同伴);
}
this.DataContext=this;
ListBoxItems.ItemsSource=fellowList;
}
公学院士
{
公共字符串x{get;set;}
公共字符串值{get;set;}
}
希望有帮助。根据您的意愿更改视图模型您需要阅读msdn关于列表和网格中数据可视化的以下博客 如果没有看到您的整个xaml代码,我无法给出确切的答案,但我猜您在xaml列表框中被放置在canvas/StackPanel或scrollviewer控件中 如果ItemsControl视口的大小不受限制,则该控件不执行虚拟化。相反,它为集合中的每个项目创建一个项目容器。一些不限制视口大小的常见容器是Canvas、StackPanel和ScrollViewer。在这种情况下,可以通过直接设置ItemsControl的大小来启用虚拟化,而不是通过其父容器来设置其大小。 在这里,我们在GridView上设置高度和宽度。这将限制视口的大小,并且视口之外的项目将被虚拟化 下面是两个场景,一个会抛出内存不足异常,另一个会正常工作(使用相同的代码进行测试) 1。画布中的列表框
<Canvas .....
<ListBox Name="ListBoxItems".....
</ListBox>
</Canvas>
坠机显示的错误是什么?@NicholasV。有时它会显示内存不足错误
它有200多个项目,是因为边框的宽度和高度吗?因为我把它从400减少到了200,所以它显示出来,但我想要400。我的意思是,一个“MyObject”类型的对象需要多少内存?它大约是你的物体由什么组成的总和。例如,如果对象包含4个整数,则对象将消耗的内存量是整数大小的四倍。如果您的对象包含视频图片等媒体元素,它可能会消耗大量内存,因此您将出现“OutOfMemoryException”。但这对200多个项目的应用程序崩溃有何影响?GUI元素不是免费的。它们由GPU上的纹理内存支持,因此非常昂贵。高通公司windows phone设备内的芯片上系统没有专用GPU芯片(它是集成的),也没有专用视频RAM(CPU、GPU和DSP都使用系统RAM)。我怀疑你的200个元素,每个400像素,由于GPU想为你的GUI元素分配太多的纹理,你的系统内存已经用完了。使用VirtualzingStackPanel,只创建了几个可视元素,它们在滚动列表时被重新使用以显示不同的项目。好的,我不知道这一点,请您帮助我在我的案例中需要将其添加到哪里?我还做了一件事,如果我把边框的宽度和高度设置为200,它会毫无错误地显示出来,但是如果它是400,它会给我空间。为什么呢?有什么想法吗?如果需要,我可以把我所有的POC都寄给你?我可以发送给你吗?“我需要在我的案例中添加它的地方”-见更新。“为什么?”-因为RAM的数量与纹理的宽度*高度成正比。当你增加元素的总面积时,纹理需要更多的内存。我可以分享我的项目吗?请把你的邮件给我我已经给你发了,你能邀请我去聊天室吗?这样我就可以解释你了。请检查一下,我会等你的答复。你能找到解决办法吗?为什么会这样?我已经检查了你的代码。。。。您正在使用自定义面板(不是默认情况下虚拟化的列表控件。使用VirtualzingPanel继承CollectionFlowPanel类,而不仅仅是pannel,以获得虚拟化的优势。我已使用VirtualzingPanel继承并加载5000条记录。现在异常不是thorws,但我无法在主视图上看到项目。您可以在这些行上检查代码。)s
<Canvas .....
<ListBox Name="ListBoxItems".....
</ListBox>
</Canvas>
<Grid .....
<ListBox Name="ListBoxItems".....
</ListBox>
</Grid>