提高Windows Phone中列表框的性能

时间:2013-08-27 08:16:28

标签: windows-phone-7

我正在开发一个Windows手机应用程序,我正在使用一个列表框。我正在绑定媒体库中的一些图像。但是它需要花费很多时间来加载。所以如果媒体库中有很多图像,它将会这样很多时间。

private List<img> _galleryImages = new List<img>(); 

public void getImages()
{
    try
    {
        MediaLibrary mediaLibrary = new MediaLibrary();
        var pictures = mediaLibrary.Pictures;
        foreach (var picture in pictures)
        {
            BitmapImage image = new BitmapImage();
            image.SetSource(picture.GetImage());
            img mediaImage = new img();
            mediaImage.Imgs = image;
            _galleryImages.Add(mediaImage);
        }
    }
    catch (Exception ex)
    {

    }

}

   public class img
{
    public BitmapImage Imgs { get; set; }
}

在xaml ....

            <toolkit:LongListSelector  x:Name="imageList" IsFlatList="True" >
            <toolkit:LongListSelector.ItemTemplate>
                <DataTemplate >
                    <Image Name="im" Source="{Binding img}" Width="100" Height="100"/>
                </DataTemplate>
            </toolkit:LongListSelector.ItemTemplate>
        </toolkit:LongListSelector>

 private void imageList_SelectionChanged_1(object sender, SelectionChangedEventArgs e)
    {
        MediaLibrary mediaLibrary = new MediaLibrary();
        BitmapImage image = new BitmapImage();
        image.SetSource(mediaLibrary.Pictures[imageList.SelectedIndex].GetImage());
        image1.Source = image;
    }

所以请给我一些提示,将图像从媒体库快速加载到列表框....

2 个答案:

答案 0 :(得分:0)

当用户滚动列表时,您可以使用LongListSelector加载更多图片:

  

Windows Phone用户喜欢顺利刷手机以获取他们想要的信息。无论是通过全景和旋转控件水平滑动,还是在People Hub等区域中滑动垂直列表,用户都可以将手机视为一个小窗口,其中包含无限量的有用信息。

     

我们作为开发人员有责任让用户在浏览时在视口中始终提供信息。为了保持这种无限滚动的感觉,我们希望将所有数据加载到内存中。但是,对于大多数实际情况,我们不可能预先加载所有数据。 People Hub中的新闻源是从Web服务获取新数据的典型示例。

     

在这篇文章中,我将介绍如何使用LongListSelector控件预取信息以创建Windows Phone 7.5的无限可滚动列表。这种方法有时被称为“加载......模式”。

答案 1 :(得分:0)

  • 使用虚拟化列表非常重要(例如,使用ListBox [VirtualizedStackPanel,默认]而不是ScrollViewerItemsControl

  • 也许您可以使用LowProfileImageLoader来加载图片(我不确定WP8中是否真的需要)

  • 尝试改善图像的加载(例如更快的服务器,避免代理等)。你的瓶颈在哪里?

  • 我将LowProfileImageLoader进一步发展到我的ImageHelper课程,并开发了ExtendedListBox。使用这两个组件,您可以避免在滚动时加载图像,从而提高滚动性能。

  • ExtendedListBox甚至有一个滚动到结束事件来加载更多元素(不要一次加载所有元素)。我认为使用LongListSelector控件也可以这样做,请参阅@ BartW的回答。

向我们展示更多代码,以便我们更好地帮助您......