我在Wp8(MVVM Light)上有一个Messenger应用程序。人们可以创建群组对话并为该对话分配图像。除会话概述中的会话标题,会话本身以及会话详细信息外,还会显示这些图像。
缓存这些图像。它是一个使用弱内存缓存和独立内存缓存的双层缓存。会话组的成员可以更改图像。他们通过将新图像上传到服务器并将会话图像更改消息发送到其他组消息来实现此目的。
现在我正在寻找一种改变所有图像的高效和优雅的方式。我可以收到这些更新消息,我可以轻松清除缓存,所以如果图像得到重新绑定,它会加载新图像,但问题在于我的导航回栈中视图中已经绑定的图像。当我向后导航时,我不想重置该视图中的所有图像,而只是重置那些过时的图像。
我目前正在使用从缓存中检索的ImageSource直接绑定图像。我正在考虑一种图像容器,它包含imagesource,并且有一个全局imagecontainer-manager,它保持容器的弱引用,并为图像源提供可绑定的属性。每当我收到图像更新时,我检查容器是否仍然保持对该图像的弱引用,只是在图像源属性上引发属性更改事件。
有没有其他更好的想法或者已经实现了类似的库?
答案 0 :(得分:1)
在为FFImageLoading库(https://github.com/molinch/FFImageLoading)执行Windows(WinRT,UWP)实现时,我有一些使用此类操作的经验。你也可以尝试一下 - 它有转换支持(自定义)。
基本上你不想使用WriteableBitmap
之类的东西,因为它会强制你在做一些像素/数据更新时使用UI线程。您想使用byte[]
或int[]
像素数据。完成所有像素数据操作后,只需将其转换为WriteableBitmap即可。
如何实现这一目标的好帮手:https://github.com/teichgraf/WriteableBitmapEx/(BitmapContext类)
您可以调用WriteableBitmap.Invalidate()来通知它的数据已更改。您还可以为多个视图使用相同的WriteableBitmap图像。它会加快速度(这正是FFImageLoading的工作方式)。
答案 1 :(得分:0)
您可以JetImageLoader尝试Artem。关于此问题还有一个blog post