Изображение WPF не обновляется программно

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

XAML:

<Image Grid.Column = "3" Source = "{Binding Path=LoadingImage, Mode=TwoWay}" Width = "35" Height = "35"/>

ViewModel:

    private Image _loadingImage = new Image();
    public Image LoadingImage
    {
      get => _loadingImage;
      set
      {
        _loadingImage = value;
        RaisePropertyChanged(nameof(LoadingImage));
      }
    }

    //Method called by the command... i debugged it and it gets here just fine
    private void GetDirectories()
        {
          FolderBrowserDialog folderBrowseDialog = new FolderBrowserDialog();
          DialogResult result = folderBrowseDialog.ShowDialog();
          if (result == DialogResult.OK)
          {
             //This is how I am getting the image file
             LoadingImage.Source = new BitmapImage(new Uri("pack://application:,,,/FOONamespace;component/Resources/spinner_small.png"));
                //More code below
           }
         }

Некоторые другие настройки, мой файл .png имеет следующие свойства:

Build Action: Resource
Copy to Output Directory: Copy if newer

Для меня это головной убор. Что я делаю неправильно? Большое спасибо.

Если это вообще сработает, я буду удивлен. LoadingImage должен быть ImageSource или BitmapImage, а не изображением. Вы привязываете LoadingImage к свойству Source, поэтому он должен быть типом ImageSource (например, BitmapImage).

Mike Zboray 09.11.2018 18:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
124
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете использовать элемент Image в качестве значения свойства Source другого элемента Image.

Измените тип свойства на ImageSource:

private ImageSource _loadingImage;
public ImageSource LoadingImage
{
    get => _loadingImage;
    set
    {
        _loadingImage = value;
        RaisePropertyChanged(nameof(LoadingImage));
    }
}

и назначьте свойство следующим образом:

LoadingImage = new BitmapImage(
    new Uri("pack://application:,,,/FOONamespace;component/Resources/spinner_small.png"));

Кроме того, установка режима привязки на TwoWay бессмысленна.

<Image Source = "{Binding LoadingImage}" />

и копирование в выходной каталог также не нужно, потому что действие сборки Resource делает файл образа ресурсом сборки, который компилируется в сборку.

Ага, я сразу это увидел, сразу после того, как выложил. Если вы не возражаете, я спрашиваю, почему установка двустороннего режима привязки бессмысленна? В любом случае большое спасибо!

user2529011 09.11.2018 18:46

Элемент Image никогда не изменяет значение своего свойства Source, поэтому направление привязки никогда не бывает от цели к источнику.

Clemens 09.11.2018 18:48

Другие вопросы по теме