如何访问MVVM WPF应用程序中的图像资源?

问题描述:

我一直在将图像资源集成到我的WPF程序集中很长一段时间,但我从未真正发现过将它们绑定到我的MVVM应用程序中的非常好的方法。如何访问MVVM WPF应用程序中的图像资源?

所以我在想,如果你有的,计算器的用户,可以当它涉及到装配ressources分享自己的做法:

  • 你如何引用它们在C#/ VB和XAML?
  • 从代码暴露他们时,你公开什么类型? (BitmapImage,Uri,string,...)
  • 你更喜欢从视图引用它们还是通过视图模型绑定它们?
  • 您是否使用特定的程序集来存储它们?你如何组织他们?

感谢您的帮助;-)

这是我做的......

  1. 图像保存在某个文件夹,例如在项目的根文件夹Images。您可以将它们放在任何装配中。
  2. 单个图像有Build Action属性设置为Resource类型。
  3. 视图模型在string保持图像的名字(比如财产MyImageName),我将它转换为当绑定到XAML Image对象的Source一个相对路径...

    public class ImagePathConverter 
    { 
        public void Convert(...) 
        { 
         return "pack://application:,,,/MyApplicationName;component/Images/" + value.ToString(); 
        } 
    } 
    

哪里MyApplicationName是在其下面有Images文件夹的短程序集名称。

  1. 在XAML中,假设视图模型实例绑定到整个视图和/或至少向图像的数据contect数据上下文....

    <Image Source="{Binding Path=MyImageName, Converter={StaticResource ImagePathConverter}}" /> 
    

但随后这是通过MVVM在WPF项目中引用图像的典型方法之一。其他方法包括加载Image的二进制流(来自resxContent类型的图像或来自二进制数据库)。在这种情况下,您的转换器会将其转换为BitMapImageSource

+0

谢谢你分享你的做法。 – Ucodia

+0

不是最佳做法:)。我宁愿在代表每种图像类型的viewmodel上创建一些枚举,并写出转换器将类型转换为图像。更多的代码,但更好的维护性和可测试性。 –