UWP應用程序,一組視圖模型被實例化並填充到頁面的構造函數中。每個物品都有一個名爲ImageSource
的屬性,類型爲BitmapImage
,初始化爲新的BitmapImage()
。該視圖具有綁定到集合的網格視圖。在該視圖中,爲集合的項目定義DataTemplate
。特別是,DataTemplate
顯示了一個圖像,其源代碼綁定到該項目的屬性ImageSource
。 DataTemplate
也處理Image的事件,因此它在圖像仍在加載時顯示一個佔位符。 頁面的Loaded事件觸發所有圖像源的下載:uwp延遲加載圖像源
private async void Page_Loaded(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
foreach (ImageViewModel imageViewModel in this.imageViewModels)
{
IRandomAccessStream randomAccessStream = await SlowImageSourceProvider.GetRandomAccessStream(imageViewModel.Id);
await imageViewModel.ImageSource.SetSourceAsync(randomAccessStream);
}
}
在這段代碼中,IRandomAccessStream
一個實例從一個緩慢的提供商獲取的,像HttpClient
聽慢速網絡上。
視圖上的Image.Source綁定到上面代碼的imageViewModel.ImageSource
。以這種方式,在開始下載其自己的源代碼之前,每個圖像需要等待前一個圖像結束其下載。
如何讓所有圖像立即開始下載,而不用等待其他圖像呢?
我唯一的想法是創建一個IRandomAccessStream的懶惰實現,但我徘徊,如果有更好的方式做到這一點。
謝謝!
在'從[UWP社區工具包(http://www.uwpcommunitytoolkit.com/en/ ImageEx'控制看一看主/控制/ ImageEx /)。也許這會有所幫助。 – AVK
謝謝。 ImageEx具有在加載圖像時顯示佔位符的功能,但似乎沒有解決以異步且高效的方式加載圖像集的問題。 –
那麼,我的應用程序下載50個大小爲〜300 KB的圖像,每個都作爲集合而不掛起屏幕,並使用惰性實現將它們加載到我的'GridView'中。嘗試示例應用程序,看看它是否適合您的要求。 – AVK