2012-12-09 31 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); 
相关问题