如何访问MVVM WPF应用程序中的图像资源?
问题描述:
我一直在将图像资源集成到我的WPF程序集中很长一段时间,但我从未真正发现过将它们绑定到我的MVVM应用程序中的非常好的方法。如何访问MVVM WPF应用程序中的图像资源?
所以我在想,如果你有的,计算器的用户,可以当它涉及到装配ressources分享自己的做法:
- 你如何引用它们在C#/ VB和XAML?
- 从代码暴露他们时,你公开什么类型? (BitmapImage,Uri,string,...)
- 你更喜欢从视图引用它们还是通过视图模型绑定它们?
- 您是否使用特定的程序集来存储它们?你如何组织他们?
感谢您的帮助;-)
答
这是我做的......
- 图像保存在某个文件夹,例如在项目的根文件夹
Images
。您可以将它们放在任何装配中。 - 单个图像有
Build Action
属性设置为Resource
类型。 -
视图模型在
string
保持图像的名字(比如财产MyImageName
),我将它转换为当绑定到XAMLImage
对象的Source
一个相对路径...public class ImagePathConverter { public void Convert(...) { return "pack://application:,,,/MyApplicationName;component/Images/" + value.ToString(); } }
哪里MyApplicationName
是在其下面有Images
文件夹的短程序集名称。
-
在XAML中,假设视图模型实例绑定到整个视图和/或至少向图像的数据contect数据上下文....
<Image Source="{Binding Path=MyImageName, Converter={StaticResource ImagePathConverter}}" />
但随后这是通过MVVM在WPF项目中引用图像的典型方法之一。其他方法包括加载Image的二进制流(来自resx
或Content
类型的图像或来自二进制数据库)。在这种情况下,您的转换器会将其转换为BitMapImageSource
。
谢谢你分享你的做法。 – Ucodia
不是最佳做法:)。我宁愿在代表每种图像类型的viewmodel上创建一些枚举,并写出转换器将类型转换为图像。更多的代码,但更好的维护性和可测试性。 –