应用程序崩溃,同时将大量项目加载到列表框

时间:2013-07-25 09:44:33

标签: c# image xaml windows-phone-8 windows-phone

我正在开发 windows phone8 app 我有一个显示大量项目的ListBox,我在ListBox的数据模板中也有一个图像控件。

当我加载前100个项目时效果很好,当我加载下100个项目(总共200个)时,会发生应用程序崩溃。

任何人都可以帮我解决这个问题。

这是我的列表框代码

<ListBox ScrollViewer.VerticalScrollBarVisibility="Disabled" Visibility="Visible" x:Name="commentsListBox" VerticalAlignment="Top" >
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <Border BorderBrush="#FFB9B9B9" BorderThickness="0,0,0,2" Width="462" Margin="14,0,0,0">
                                <Grid VerticalAlignment="Top" Width="470" >
                                    <Image HorizontalAlignment="Left" Height="100" Width="100" VerticalAlignment="Top" Margin="10,20,0,0" Stretch="Fill" Source="{Binding profileImage}"></Image>
                                    <TextBlock Name="userNameTextBlock"  VerticalAlignment="Top" FontWeight="Bold" HorizontalAlignment="Left" Text="{Binding userName}" Foreground="Black" Height="36" Width="238" Margin="136,18,0,0" TextTrimming="WordEllipsis" FontFamily="Tahoma" />
                                    <StackPanel VerticalAlignment="Top" HorizontalAlignment="Left" Margin="146,68,0,0" Width="314">
                                        <TextBlock Name="commentTextBlock" VerticalAlignment="Top" TextAlignment="Left" HorizontalAlignment="Left" Foreground="Black" Text="{Binding comment}" Width="313" TextWrapping="Wrap" FontFamily="Tahoma" Margin="0,0,-17,0" ></TextBlock>
                                        <TextBlock Text="{Binding date}" Height="36" Foreground="Red" Width="264"  Name="commentDate" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,0,10,0" TextTrimming="WordEllipsis" FontFamily="Tahoma"></TextBlock>
                                        <Button HorizontalAlignment="Right" Width="100" Content="View" Height="70" FontSize="18" x:Name="viewBtn" Background="#FFD71D26" VerticalAlignment="Bottom" Margin="0,0,-10,-10"></Button>
                                    </StackPanel>

                                </Grid>
                            </Border>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                    <!--<ListBoxItem>

            </ListBoxItem>-->
                </ListBox>

并且具有数据的类是

 public class WishListCommentCommonFormate
{
    public string comment { get; set; }
    public string userName { get; set; }
    public DateTime date { get; set; }
    public string profileImage { get; set; }
}

这里的图像是作为网站的URL给出的。 我看到了Improving ListBox Performance in Silverlight for Windows Phone 7: Data Virtualization以及更多这样的例子,但我无法解决这个问题。

请给我一些想法。 谢谢。

1 个答案:

答案 0 :(得分:1)

两个建议。第一个如果你必须使用ListBox,你可以通过阅读ListBox why art thou blanking获得更好的图像性能和虚拟化。在Windows Phone开发团队的这篇文章中,他们提到了一种设置图像的不同方法。

<Image> 
    <Image.Source> 
        <BitmapImage UriSource="{Binding ImgUrl}" CreateOptions="BackgroundCreation"/> 
    </Image.Source> 
</Image>

第二个建议(可能更好)是不使用LstBox而是使用LongListSelector。这种控制是高效的,并且使用更少的内存。只需在xaml中执行从ListBox到LongListSelector的查找/替换。