2016-01-18 55 views
0

我想在我的MVVM WPF應用程序中顯示帶有URL源的圖像。 XAML中我用的是:WPF使用URL源緩存圖像

<ContentControl> 
    <Image Margin="5" Height="190" Source="{Binding CampaignMainImage}"/> 
</ContentControl> 

在我看來模型,我嘗試作爲stringBitmapImageCampaignMainImage結合這一點。在這兩種情況下,圖片來源均來自網址。這兩個工作,我的應用程序成功顯示圖像。

但是,在同一個應用程序中,我需要允許用戶上傳新圖像。我通過文件選擇和ftp上傳來做到這一點。我成功完成了上傳操作,並且看到了導致事件發生的斷點。

問題是,新圖像的名稱必須與舊圖像的名稱相同,並且WPF似乎正在緩存圖像。即使當我在應用程序中關閉該窗口並新建viewmodel的實例時,仍會顯示舊圖像。當我關閉應用程序並再次運行時,會顯示新圖像。

我該如何阻止這種緩存行爲?

編輯:

提出的重複解決問題與綁定到BitmapImage(視圖相關類型)。如下面的註釋中的Tseng所示,這是一個非MVVM解決方案,其中用於查看相關類型的數據綁定不會中斷模型。更具體地說,這個問題是如何在不破壞MVVM模式的情況下完成緩存行爲

+2

它已經在這裏回答:http://stackoverflow.com/questions/4137469/wpf-image-source-caching-too-aggressively – drcolombo

+0

非常感謝。我一直在尋找這一段時間,不知何故沒有看到。 –

+0

這個問題並不完全重複。這個問題用MVVM標記,鏈接的問題只是關於WPF。在ViewModel中使用'BitmapImage'違反了MVVM模式 – Tseng

回答

0

這個問題實際上已被問及回答(感謝drcolombo指出)。但是(正如tseng指出的那樣),答案不屬於MVVM模式,並且通過在視圖模型中使用視圖類型元素(BitmapImage)來打破模式。

對於那些對非MVVM答案感興趣的人,可以找到以前問題的鏈接here

非MVVM溶液是創建位圖圖像時,用於設置

bitmap.CreateOptions = BitmapCreateOptions.IgnoreImageCache 

+1

請參閱我上面的評論。使用這違反了你的MVVM模式方法。你不能將數據綁定到'BitmapImage',因爲它是一個視圖相關類型(在PresentationCore.dll中定義,這是一個特定於WPF的程序集)。在Viewmodel中使用它會創建與WPF的緊密耦合,這正是您想要通過MVVM避免的情況。 – Tseng

+0

感謝您指出這一點。我編輯了這個問題和答案,並投票決定重新打開這個問題。 –