Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.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
如何在MVVM WPF应用程序中访问图像资源?_Wpf_Image_Resources - Fatal编程技术网

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

如何在MVVM WPF应用程序中访问图像资源?,wpf,image,resources,Wpf,Image,Resources,很长一段时间以来,我一直在将图像资源集成到我的WPF程序集中,但我从未真正找到一种在MVVM应用程序中绑定它们的非常好的方法 因此,我想知道一些stackoverflow用户在组装资源时是否可以分享他们自己的做法: 如何在C/VB和XAML中引用它们? 当从代码中公开它们时,您会公开什么类型?位图图像、Uri、字符串。。。 您更喜欢从视图引用它们还是通过视图模型绑定它们? 您是否使用特定的程序集来存储它们?你如何组织它们? 谢谢你的帮助- 我就是这么做的 图像保存在某些文件夹中,例如项目根文件夹

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

因此,我想知道一些stackoverflow用户在组装资源时是否可以分享他们自己的做法:

如何在C/VB和XAML中引用它们? 当从代码中公开它们时,您会公开什么类型?位图图像、Uri、字符串。。。 您更喜欢从视图引用它们还是通过视图模型绑定它们? 您是否使用特定的程序集来存储它们?你如何组织它们? 谢谢你的帮助-

我就是这么做的

图像保存在某些文件夹中,例如项目根文件夹中的图像。您可以将它们保存在任何程序集中。 单个映像的生成操作属性设置为资源类型。 ViewModel将图像名称保存在字符串中,比如属性MyImageName,当绑定到XAML中图像对象的源时,我将其转换为相对路径

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

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

<Image Source="{Binding Path=MyImageName, Converter={StaticResource ImagePathConverter}}" />
但这是通过MVVM引用WPF项目中图像的典型方法之一。其他方法包括从resx或内容类型图像或二进制数据库加载图像的二进制流。在这种情况下,转换器会将其转换为位图图像源。

我就是这么做的

图像保存在某些文件夹中,例如项目根文件夹中的图像。您可以将它们保存在任何程序集中。 单个映像的生成操作属性设置为资源类型。 ViewModel将图像名称保存在字符串中,比如属性MyImageName,当绑定到XAML中图像对象的源时,我将其转换为相对路径

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

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

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

但这是通过MVVM引用WPF项目中图像的典型方法之一。其他方法包括从resx或内容类型图像或二进制数据库加载图像的二进制流。在这种情况下,转换器会将其转换为BitMapImageSource。

感谢您分享您的做法。这不是最佳做法:。我更愿意在viewmodel上创建一些表示每种图像类型的枚举,并编写用于将类型转换为图像的转换器。更多的代码,但更好的可维护性和可测试性。感谢您分享您的做法。这不是最佳做法:。我更愿意在viewmodel上创建一些表示每种图像类型的枚举,并编写用于将类型转换为图像的转换器。更多的代码,但更好的可维护性和可测试性。