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

时间:2011-09-13 13:07:19

标签: wpf image resources

我一直在将图像资源集成到我的WPF程序集中很长一段时间,但我从来没有真正找到一种在我的MVVM应用程序中绑定它们的方法。

所以我想知道你们堆栈流用户是否可以在汇编资源方面分享他们自己的做法:

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

感谢您的帮助; - )

1 个答案:

答案 0 :(得分:6)

这就是我做的......

  1. 图像保存在某个文件夹中,例如项目根文件夹中的Images。您可以将它们保存在任何组件中。
  2. 单个图片的Build Action属性设置为Resource类型。
  3. ViewModel将图片名称保存在string(例如属性MyImageName)中,并在绑定到Source时将其转换为相对路径XAML中的Image对象...

    public class ImagePathConverter
    {
       public void Convert(...)
       {
          return "pack://application:,,,/MyApplicationName;component/Images/" + value.ToString();
       }
    }
    
  4. 其中MyApplicationName是短程序集的名称,其下面有Images文件夹。

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

      <Image Source="{Binding Path=MyImageName, Converter={StaticResource ImagePathConverter}}" />
      
    2. 但那是通过MVVM在WPF项目中引用图像的典型方法之一。其他方式包括加载Image的二进制流(来自resxContent类型的图像或来自二进制数据库)。在这种情况下,您的转换器会将其转换为BitMapImageSource