usando XAML para enlazar a un System.Drawing.Image en un control System.Windows.Image

Estoy vinculando un ListView a una lista de objetos, como tal;

 

Estoy atando a un objeto que declara dos propiedades;

 string DisplayName { get; } System.Drawing.Image Image { get; set; } 

Quiero rellenar un DataTemplate pero no puedo entender cómo; si hago esto en mi plantilla;

     

El texto aparece pero la imagen no. ¿Qué estoy haciendo mal? La salida de depuración muestra

 System.Windows.Data Error: 1 : Cannot create default converter to perform 'one-way' conversions between types 'System.Drawing.Image' and 'System.Windows.Media.ImageSource'. Consider using Converter property of Binding. BindingExpression:Path=Image; DataItem='RealElement' (HashCode=54308798); target element is 'Image' (Name=''); target property is 'Source' (type 'ImageSource') 

Encontré una manera con la que estoy feliz. Usando el puntero de Reed Copsey y este tutorial , envolví el código como un IValueConverter .

Aquí está el convertidor de System.Drawing.Image a System.Windows.Media.ImageSource ;

 using System; using System.Drawing.Imaging; using System.Globalization; using System.IO; using System.Windows.Data; namespace System.Windows.Media { ///  /// One-way converter from System.Drawing.Image to System.Windows.Media.ImageSource ///  [ValueConversion(typeof(System.Drawing.Image), typeof(System.Windows.Media.ImageSource))] public class ImageConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { // empty images are empty... if (value == null) { return null; } var image = (System.Drawing.Image)value; // Winforms Image we want to get the WPF Image from... var bitmap = new System.Windows.Media.Imaging.BitmapImage(); bitmap.BeginInit(); MemoryStream memoryStream = new MemoryStream(); // Save to a memory stream... image.Save(memoryStream, ImageFormat.Bmp); // Rewind the stream... memoryStream.Seek(0, System.IO.SeekOrigin.Begin); bitmap.StreamSource = memoryStream; bitmap.EndInit(); return bitmap; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return null; } } } 

Entonces necesitas traer el convertidor de imágenes a XAML como recurso;

 xmlns:med="clr-namespace:System.Windows.Media" ...    

Luego puede usarlo en XAML para enlazar directamente a la imagen, usando el nuevo convertidor;

  

No puede vincular eso directamente; necesita tener algún tipo de convertidor que se convierta de una imagen GDI a una imagen WPF.

Aquí hay un enfoque : utiliza un flujo de memoria para extraer los datos de la imagen GDI y crear un objeto BitmapSource.