2013-08-27 24 views
0

我正在開發一個Windows Phone應用程序,我使用的是一個listbox.I我綁定了一些來自媒體庫的圖像。但它花費了很多時間來加載。所以如果有很多圖像在媒體庫中它會花費很多時間。增加在Windows Phone中的列表框的性能

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

所以,請給我一些提示,加載從媒體庫圖像,那麼快速度的ListBox ....

+0

使用實現虛擬化的ListBox。像'LongListSelector'或Telerik的'RadDataBoundListBox' –

+0

你也應該使用縮略圖,而不是全尺寸的圖像。 –

+0

@ Anton-感謝您的回覆,但我正在使用帶有圖片的列表框,正如我所說的。因此,選擇列表框圖像後,選定的項目被綁定到一個大的圖像源,我只想知道如何將此縮略圖轉換爲高分辨率圖像。 –

回答

0

你可以使用一個LongListSelector來在用戶滾動列表時加載更多圖像:

Windows Phone用戶喜歡輕鬆地滑動手機以便進入他們想要的形成。無論是通過全景和旋轉控制水平滑動,還是在People Hub等區域滑動垂直列表,用戶都可以將手機視爲一個小窗口,查看無限量的有用信息。

作爲開發人員,我們作爲開發人員有責任讓用戶在周圍滑動時看起來像在視口中始終可用的信息。爲了保持這種對無限滾動的感知,我們希望將所有數據加載到內存中。但是,對於大多數實際情況,我們不可能預先加載所有數據。 People Hub中的新聞源是從Web服務獲取新數據的典型示例。

在本文中,我將介紹如何預先獲取信息以使用LongListSelector控件爲Windows Phone 7.5創建無限可滾動列表。這種方法有時被稱爲「載入中...格局。」

0
  • 它使用虛擬化列表(例如使用列表框[與VirtualizedStackPanel,默認]不是ScrollViewerItemsControl)是非常重要的。

  • 也許你可以使用LowProfileImageLoader以固定圖像加載(我不知道它是否真的需要在WP8)

  • 努力提高圖片加載(如更快的服務器,避免代理等) 。Whe你的瓶頸是什麼?

  • 我開發了LowProfileImageLoader繼續我的ImageHelper類,也開發了ExtendedListBox。有了這兩個組件,您可以避免在滾動時加載圖像,從而提高滾動性能。

  • ExtendedListBox甚至有一個滾動到結束事件來加載更多的元素(不要一次加載所有元素)。我認爲這也可能與LongListSelector控制,請參閱@ BartW的答案。

向我們展示一些代碼,以便我們可以幫助您更好地...

+0

感謝您回覆Rico,我看到了您的lowProfileImageLoader,但問題是,正如我上面所說,我綁定listbox selecteditem一個大圖像源,我發現如果我加載縮略圖它加載如此之快,所以我想知道選擇列表框選擇項目後,如何將thumbanails轉換爲高分辨率圖像。 –

+0

圖像本身很大還是有大量圖像?你如何訪問圖像?在自己的服務器上? –

+0

嗨波多黎各,我已經更新了我的問題,並添加了代碼。其實我正在服用縮略圖,所以如何將這些縮略圖轉換爲我image.source中的高分辨率圖像 –