0

我正在开发一个使用列表框的 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; }
}

在xml中......

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

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

4

2 回答 2

0
  • 使用虚拟化列表很重要(例如,使用 ListBox [with VirtualizedStackPanel, default] 而不是 a ScrollViewerwith an ItemsControl)。

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

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

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

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

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

于 2013-08-27T23:38:36.427 回答
0

您可以在用户滚动列表时使用LongListSelector加载更多图像:

Windows Phone 用户喜欢流畅地滑动手机以获取他们想要的信息。无论是通过全景和枢轴控件水平滑动,还是在人员中心等区域中滑动垂直列表,用户都将手机视为一个小窗口,可以看到无限量的有用信息。

作为开发人员,我们有责任让它看起来和感觉起来,当用户四处滑动时,信息总是在视口中可用。为了保持这种无限滚动的感觉,我们希望将所有数据加载到内存中。但是,对于大多数实际情况,我们不可能预先加载所有数据。People Hub 中的新闻提要是从 Web 服务获取新数据的经典示例。

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

于 2013-08-27T21:33:45.180 回答