A post describing how to bind an image such as a bitmap or png file to your viewmodel.
In Visual Studio create a new WPF project:

Observe that this creates the initial default XAML for the main window as shown:
MainWindow.xaml
<Window x:Class="MVVM.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
</Grid>
</Window>
Which when running the program produces the following blank window:
Initial Window
Now we need to add the ViewModel class, as is used in the Model-View ViewModel pattern. In Visual Studio add a new class representing the ViewModel for our main window XAML and call it MainWindowViewModel.cs:
And configure the code so we have a property for returning the bitmap image in a format that is suitable for our WPF. Also in this class is a static method for converting a general bitmap format into a BitmapSource type:
using System;
using System.Drawing.Imaging;
using System.Drawing;
using System.Windows.Media.Imaging;
using System.Windows;
namespace MVVM
{
public static class BitmapConversion
{
public static BitmapSource BitmapToBitmapSource(Bitmap source)
{
return System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
source.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
BitmapSizeOptions.FromEmptyOptions());
}
}
public class MainWindowViewModel
{
private BitmapSource _bitmapSource;
public MainWindowViewModel()
{
Bitmap bitmap = (Bitmap) Bitmap.FromFile(@"c:\dump\bulb.png", true);
_bitmapSource = BitmapConversion.BitmapToBitmapSource(bitmap);
}
public BitmapSource ButtonSource
{
get { return _bitmapSource; }
}
}
}
If you have trouble compiling the source make sure all the references are installed, particularly System.Drawing:
And of course be sure that your program is able to find the location of the image file that we are binding to, in my example it is “C:\dump\bulb.png”:
public MainWindowViewModel()
{
Bitmap bitmap = (Bitmap) Bitmap.FromFile(@"c:\dump\bulb.png", true);
_bitmapSource = BitmapConversion.BitmapToBitmapSource(bitmap);
}
Modify the MainWindow.xaml to include the DataContext and to insert a new button containing the image we wish to bind to:
<Window x:Class="MVVM.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:VM="clr-namespace:MVVM"
Title="MainWindow"
Height="234"
Width="326">
<Window.DataContext>
<VM:MainWindowViewModel />
</Window.DataContext>
<Grid>
<Button HorizontalAlignment="Left" Margin="35,0,0,138" VerticalAlignment="Bottom" Width="75" Height="29">
<Image Source="{Binding ButtonSource}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0">
</Image>
</Button>
</Grid>
</Window>
Compiling and running this gives the following Window, this time with button containing the XAML-bounded image:
Download Visual Studio 2010 project from here:



