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

发布于 2024-12-04 11:33:49 字数 317 浏览 1 评论 0原文

我将图像资源集成到 WPF 程序集已经有一段时间了,但我从未真正找到一种真正漂亮的方法将它们绑定到我的 MVVM 应用程序中。

所以我想知道你们这些 stackoverflow 用户是否可以分享一下他们自己在程序集资源方面的实践:

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

感谢您的帮助 ;-)

I have been integrating image resources to my WPF assemblies for quite a time, but I never really found a really pretty way of binding them in my MVVM applications.

So I was wondering if some you, stackoverflow users, could share their own practice when it comes to assembly ressources:

  • How do you reference them in C#/VB and XAML?
  • When exposing them from code, what type do you expose? (BitmapImage, Uri, string, ...)
  • Do you prefer referencing them from the view or binding them through view-model?
  • Do you use a specific assembly to store them? How do you organize them?

Thanks for your help ;-)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心病无药医 2024-12-11 11:33:50

这就是我所做的...

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

    公共类ImagePathConverter
    {
       公共无效转换(...)
       {
          返回“pack://application:,,,/MyApplicationName;component/Images/”+ value.ToString();
       }
    }
    

其中 MyApplicationName 是具有 Images 文件夹下。

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

    
    

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

This is what I do...

  1. Images are kept in some folder such as Images in project's root folder. You can keep them in any assembly.
  2. Individual image has Build Action property set to Resource type.
  3. The ViewModel holds image name in string (say property MyImageName) and I convert it as a relative path when bound to the Source of Image object in XAML...

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

where MyApplicationName is the short assembly's name that is having the Images folder under it.

  1. In XAML, assuming the view model instance is bound to the data context of the entire view and / or atleast to the image's data contect ....

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

But then thats one of the typical ways to refer images in a WPF project via MVVM. Other ways include an Image's binary stream loaded (from resx or Content type images or from binary database). In such case your converter will convert it into a BitMapImageSource.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文