2012-12-09 4 views
1

내가 뭘 하려는지 사전로드 된 이미지와 동적으로 Windows 8 Metro 응용 프로그램에서 ListView를 채우는 것입니다. 나는이 같은 코드 (C++)과는 일반 간단하고있어 각 항목 (URI)에 대한 Windows 8 Xaml 기반 ListView에서 캐시를 사용하지 않도록 설정하는 방법?

:

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

에 나와 있습니다. 발견하면 자신의 질문에 대한 답변을 게시하는 것이 실제로 허용됩니다 (실제로 권장 됨). – mydogisbox

답변

0

의견에 고무되어 나는 스스로를 찾았습니다.

더 넓은 맥락 (그리고 C#의 관점은) 여기에 설명 : http://social.msdn.microsoft.com/Forums/en-US/winappswithcsharp/thread/171dfe66-78b5-4340-bd78-244337f31287/

은 곧 내가 그것을 참조 여기에 계산에 문제가 믿습니다. WinRT는 Uri가 유효하고 객체 인스턴스에 할당되어있는 한 BitmapImage ^에 이미지를로드 (캐시 됨) 상태로 유지합니다.이 예에서는 객체 인스턴스가 목록에 추가됩니다.

필자의 경우 목록에서 풀기 전에 Uri을 BitmapImage ^에서 삭제하십시오. 코드 (목록 제거가 수행되는 부분에 포함) 문제 해결 아래

문제의 예에 따르면, :

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); 
관련 문제