Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Binding image source through property in wpf

Tags:

wpf

xaml

I am trying to display an icon using an image source(.jpg). I create a Icon property in view model and try to assign it the path of the image but I do not see any image in the view. I tried converting the path to Bitmap image but doesn't work. Is there anything I am missing here?

<StackPanel Orientation="Horizontal">
                                <TextBlock Text="{Binding Path=Name}"/>
                                <Image Source="{Binding Path=Icon}"></Image>
                            </StackPanel>




BitmapImage img = new BitmapImage();
                    img.BeginInit();
                    img.CacheOption = BitmapCacheOption.OnLoad;
                    img.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
                    img.UriSource = new Uri("C:\\Users\\Public\\Pictures\\Sample Pictures\\Chrysanthemum.jpg", UriKind.Absolute);
                    img.EndInit();
                    Icon = img;
like image 332
Virus Avatar asked Jan 16 '13 12:01

Virus


1 Answers

I ran into this myself once and, though maybe not the best solution, the following worked for me.

1. Add the images to your project, for example:

  • Create a folder images/icons to your project and add the images there.
  • Set build action of images to Content (copy if newer)

2. Create an ImageSource property:

    public ImageSource YourImage
    {
        get { return _yourImage; }
        set 
        { 
            _yourImage = value;
            NotifyOfPropertyChange(() => YourImage);
        }
    }

(Note: I use caliburn micro to assist in binding)

3. Update the the ImageSource like this:

            if(!string.IsNullOrEmpty("TheImageYouWantToShow"))
            {
                var yourImage = new BitmapImage(new Uri(String.Format("Images/Icons/{0}.jpg", TheImageYouWantToShow), UriKind.Relative));
                yourImage.Freeze(); // -> to prevent error: "Must create DependencySource on same Thread as the DependencyObject"
                YourImage = yourImage;
            }
            else
            {
                YourImage = null;   
            }

4. Bind source attribute to YourImage property:

(you already did this)

like image 183
Deruijter Avatar answered Sep 28 '22 20:09

Deruijter