C# Binding to Images in WPF

Print Friendly, PDF & Email

C# Binding to Images in WPF

To bind to in image in WPF we need to be able to convert the Path to the .PNG file (or other type) to a Bitmap, this is done via an on the fly convertor.

	Source="{Binding SimpleNotificationImagePath,Converter={StaticResource StringtoBitmapSourceConvertor}}"

To make this work in the WPF XAML we must add a new namespace reference pointed at the name space where the convertor class resides.

 xmlns:CustomConvertors ="clr-namespace:UI_Catalog.Convertors"

And in addition we must also specify a resource for the convertor.

            <CustomConvertors:StringtoBitmapSourceConvertor x:Key="StringtoBitmapSourceConvertor"></CustomConvertors:StringtoBitmapSourceConvertor>

The convertor takes in the image file path as a string and will return a Bitmap.

using System;
using System.Drawing;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
using System.Windows.Interop;
using System.Windows.Media.Imaging;

namespace StandardHolesUserInterface.Convertors
    public class StringtoBitmapSourceConvertor : IValueConverter
        public object? Convert(object value, Type targetType, object parameter, CultureInfo culture)
            if (value != null && value is string)
                string Path = (string)value;
                return Imaging.CreateBitmapSourceFromHBitmap(
                                            ((Bitmap)Bitmap.FromFile(Path, true)).GetHbitmap(),
            return null;

        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
            throw new NotImplementedException();

Within the View Model (Data Context) we can then create a string property that is valuated by a path to a image in this case a PNG file, remembering we must implement ‘INotifyPropertyChanged’ within the View Model or within an inherited View Model Base.

string _SimpleNotificationImagePath;
public string SimpleNotificationImagePath
	get => _SimpleNotificationImagePath;
    set { _SimpleNotificationImagePath = value; NotifyPropertyChanged(); }
switch (warningType)
	case WaringType.Error:
    	SimpleNotificationImagePath = @"./Images/Error.png";
    case WaringType.Information:
        SimpleNotificationImagePath = @"./Images/Info.png";
        break; ;
        SimpleNotificationImagePath = @"./Images/Warning.png";