2009-05-29 12 views
1

Hallo Ich versuche, einen Konverter zu erstellen, um meine Bilder in einer Datenbank zu konvertieren, Datentyp „Varbinary (Max)“ mein Datagrid in WPF zu füllen, aber ich habe zwei Fehler, den Sie i zeigen den Converter:Konverter binär zu Bild WPF;

public class BinaryToImageConverter : IValueConverter 
{ 

public object Convert(object value, System.Type targetType, object parameter, 

System.Globalization.CultureInfo culture) 
    { 

    Binary binaryData = value;// here there is the first error .How convert BinaryData to Object?? 
     if (binaryData == null) { 
      return null; 
     } 

     byte[] buffer = binaryData.ToArray(); 
     if (buffer.Length == 0) { 
       return null; 
     } 

      BitmapImage res = new BitmapImage(); 
     res.BeginInit(); 
     res.StreamSource = new System.IO.MemoryStream(buffer); 
      res.EndInit(); 
     return res; 
     } 

    public object ConvertBack(object value, System.Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
     BitmapImage source = value;//How convert Bitmap to Object? 
      if (source == null) { 
       return null; 
      } 
      if ((source.StreamSource != null) && source.StreamSource.Length > 0) { 
      return GetBytesFromStream(source.StreamSource); 
     } 

     return null; 
     } 

    private Binary GetBytesFromStream(System.IO.Stream stream) 
    { 
      stream.Position = 0; 
     byte[] res = new byte[stream.Length + 1]; 
     using (System.IO.BinaryReader reader = new System.IO.BinaryReader(stream)) { 
       reader.Read(res, 0, (int)stream.Length); 
     } 
      return new Binary(res); 
    } 

} 

Cab Sie beraten mich, wenn es richtig ist oder es gibt einen besseren Weg, dies zu tun? Danke für Ihre Hilfe. einen guten Tag

+0

Können Sie angeben, was die Fehler sind? – ChrisF

Antwort

2

Wenn der Wert Parameter ein Objekt des Typs enthält Binary dann können Sie es nur typisieren:

Binary binaryData = (Binary)value; 

oder

Binary binaryData = value as Binary; 

Es ist wahrscheinlich besser ein zu tun ist, - Überprüfen Sie den Parameter value nicht vor dem Casting, anstatt ihn nach dem Cast zu tun, wie Sie es jetzt tun.

+0

Danke TomLog, das stimmt :) – JayJay