user2529011
user2529011

Reputation: 733

WPF Image won't update programmatically

I have an application where I want it to load an image when a command is invoked. But the problem is that nothing loads and nothing breaks either. I just dont see my image. I also made sure that I was setting the data context to my view model.

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
           }
         }

Some other settings, my .png file has the following properties:

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

This is head scratcher for me. What am I doing wrong? Many thanks.

Upvotes: 0

Views: 608

Answers (1)

Clemens
Clemens

Reputation: 128013

You can't use an Image element as the value of the Source property of another Image element.

Change the property type to ImageSource:

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

and assign the property like this:

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

Besides that, setting the Binding's Mode to TwoWay is pointless

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

and copying to the output directory is also unnecessary, because the Build Action Resource makes the image file an assembly resource that is compiled into the assembly.

Upvotes: 2

Related Questions