Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF使用URL源缓存图像_C#_Wpf_Xaml_Caching_Mvvm - Fatal编程技术网

C# WPF使用URL源缓存图像

C# WPF使用URL源缓存图像,c#,wpf,xaml,caching,mvvm,C#,Wpf,Xaml,Caching,Mvvm,我试图在我的MVVMWPF应用程序中显示一个带有URL源的图像。我使用的Xaml是: <ContentControl> <Image Margin="5" Height="190" Source="{Binding CampaignMainImage}"/> </ContentControl> 在我的视图模型中,我尝试将其与活动主图像作为字符串和位图图像绑定。在这两种情况下,图像源都来自web URL。这两种方法都有效,我的应用程序成功地显示了图

我试图在我的MVVMWPF应用程序中显示一个带有URL源的图像。我使用的Xaml是:

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

在我的视图模型中,我尝试将其与
活动主图像
作为
字符串
位图图像
绑定。在这两种情况下,图像源都来自web URL。这两种方法都有效,我的应用程序成功地显示了图像

但是,在同一个应用程序中,我需要允许用户上传新图像。我通过文件选择和ftp上传来实现这一点。我成功地完成了上传,并看到断点命中了引发
PropertyChanged
事件的位置

问题是,新映像的名称必须与旧映像的名称相同,而且WPF似乎正在缓存该映像。即使我在应用程序中关闭该窗口并新建
viewmodel
的实例,仍然会显示旧图像。当我关闭应用程序并再次运行时,将显示新图像

如何停止这种缓存行为

编辑:


建议的副本解决了绑定到
位图图像
(与视图相关的类型)的问题。如下面评论中的Tseng所示,这是一个非MVVM解决方案,通过数据绑定查看相关类型不会破坏模型。更具体地说,问题是如何在不破坏MVVM模式的情况下实现这种缓存行为。

这个问题实际上已经被提出并得到了回答(感谢科伦坡博士的指出)。但是(正如tseng所指出的那样),答案不属于MVVM模式,而是通过在viewmodel中使用视图类型元素(
BitmapImage
)来打破该模式

对于那些对非MVVM答案感兴趣的人,可以找到前面问题的链接

非MVVM解决方案是设置

bitmap.CreateOptions = BitmapCreateOptions.IgnoreImageCache

创建位图图像时。

这里已经给出了答案:非常感谢。我搜索这个问题已经有一段时间了,但不知怎么的,我没有看到。这个问题并不完全是重复的。这个问题用MVVM标记,链接的问题是关于WPF的。在ViewModel中使用
BitmapImage
违反了MVVM模式。您可以在视图的xaml中执行此操作,也可以在UI的代码隐藏中执行此操作。在MVVM中,两者都非常好。另一种方法是在虚拟机中下载图像,然后将图像作为字节数组公开。在我看来,如果您想要一个“MVVM”解决方案,您需要首先明确解释您认为标记的副本“违反MVVM模式”的方式。请注意,您不必在实际视图模型中放置
位图图像
,因此您可能希望使用位图图像本身并不违反MVVM。另外,请不要在标题中添加标签。请参阅我在上面的评论。使用这种方法违反了MVVM模式方法。无法将数据绑定到
位图图像
,因为它是与视图相关的类型(在PresentationCore.dll中定义,这是特定于WPF的程序集)。在Viewmodel中使用它会创建与WPF的紧密耦合,这是您希望使用MVVMV避免的,感谢您指出这一点。我已经编辑了问题和答案,并投票赞成重新打开问题。