2012-12-09 54 views
1

我想要做的是使用預加載的圖像動態填充Windows 8 Metro應用程序中的ListView。如何在基於Windows 8 Xaml的ListView中禁用緩存?

爲我做它平原這樣的(C++)代碼的簡單的每個項目(URI):

Windows::UI::Xaml::Media::Imaging::BitmapImage^ bitmapSrc = 
    ref new Windows::UI::Xaml::Media::Imaging::BitmapImage(); 

bitmapSrc->CreateOptions = Windows::UI::Xaml::Media::Imaging::BitmapCreateOptions::IgnoreImageCache; 

bitmapSrc->UriSource = uri; 

img->Source = bitmapSrc; 

LoadListView->Items->Append(img); 

但是當我刪除由URI和創建描述源圖像(該應用中)新文件具有相同的名稱,並嘗試將其重新加載到列表中,然後我失敗,並顯示的圖像是舊的(刪除)。我推測一些緩存在這裏工作。我試圖避免通過CreateOptions中的IgnoreImageCache值進行緩存,但它不起作用。

任何線索如何禁用可能綁定到Windows 8應用程序中的ListView的BitmapSource(圖像)的緩存?

我嘗試了一些受Silverlight和WPF啓發的方向,但都不幸工作。

+0

對不起,我已經找到了答案。搜索引擎的棘手關鍵字是必要的。如果您有興趣對BitmapImage緩存問題的完整解答,請在此處進行說明:http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/171dfe66-78b5-4340-bd78-244337f31287/ –

+0

On SO它是完全可以接受的(實際上鼓勵),如果你發現它,你可以發佈一個你自己問題的答案。 – mydogisbox

回答

0

受評論鼓勵,我把我發現自己的答案。

更廣的範圍內(也C#的角度)在此說明: http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/171dfe66-78b5-4340-bd78-244337f31287/

不久,我相信這是與引用計數這裏有一個問題。 只要Uri有效並且與對象實例對齊,WinRT就會將圖像加載(緩存)在BitmapImage ^中,並將其添加到列表中。

從BitmapImage ^清除Uri之前,從列表中釋放它解決了問題在我的情況。

根據示例問題,下面的代碼解決了這個問題(包括在執行列表中去除的部分):

auto item = (Image^)LoadListView->Items->GetAt(selected); 
auto src = (Windows::UI::Xaml::Media::Imaging::BitmapImage^)item->Source; 

src->UriSource = nullptr; //this line is critical 

LoadListView->Items->RemoveAt(selected); 
相關問題