Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 包含100多个项目的列表框崩溃_C#_Windows Phone 8_Listbox_Windows Phone_Listboxitems - Fatal编程技术网

C# 包含100多个项目的列表框崩溃

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/>

我正在使用windows phone 8应用程序

我有200多个项目的列表框显示

<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>