Как получить доступ к ресурсам изображений в приложениях MVVM WPF? - PullRequest
1 голос
/ 13 сентября 2011

Я уже довольно давно интегрирую ресурсы изображений в свои сборки WPF, но я так и не нашел действительно симпатичного способа связать их в своих приложениях MVVM.

Так что мне было интересно, если некоторые из вас, stackoverflowпользователи, могут поделиться своей практикой, когда дело доходит до сборочных ресурсов:

  • Как вы ссылаетесь на них в C # / VB и XAML?
  • При представлении их из кода, какой тип делатьвы выставляете?(BitmapImage, Uri, string, ...)
  • Предпочитаете ли вы ссылаться на них из представления или связывать их через view-модель?
  • Используете ли вы конкретную сборку для их хранения?Как вы их организовываете?

Спасибо за вашу помощь; -)

1 Ответ

6 голосов
/ 13 сентября 2011

Это то, что я делаю ...

  1. Изображения хранятся в некоторой папке, например Images в корневой папке проекта.Вы можете хранить их в любой сборке.
  2. Для отдельного изображения свойство Build Action имеет тип Resource.
  3. ViewModel содержит имя изображения в string (скажем, свойство MyImageName) и я преобразую его как относительный путь при привязке к Source из Image объекта в XAML ...

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

, гдеMyApplicationName - это краткое имя сборки, в котором находится папка Images.

  1. В XAML предполагается, что экземпляр модели представления связан с контекстом данных всего представления и/ или, по крайней мере, к контексту данных изображения ...

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

Но тогда это один из типичных способов ссылки на изображения в проекте WPF через MVVM.Другие способы включают загрузку двоичного потока изображения (из изображений типа resx или Content или из двоичной базы данных).В таком случае ваш конвертер преобразует его в BitMapImageSource.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...