2010-12-11 15 views
0

私はデータベースにデータを挿入する安価なウィンドウを持っています。私のdb列は以下の通りです:SQL ServerデータベースからWPFフォームにイメージを取得する方法(LINQ、Databinding、SQL)

col name(varchar), 
col age (int), 
col photo (image) (all NOT NULL) 

私はdbから自分のウィンドウに情報を取得したいと思います。

<ListBox ... DisplayMemberPath="Name"/> 

ので、名前は今、リストボックスに表示されている:私は、私は、この(LINQクエリ)のような名前を取得し、リストボックス

public void updateListbox(){ 
DataClasses1DataContext dc = new DataClasses1DataContext(); 
var query = from s in dc.tablename select s; 

_listBox1.ItemsSource = query.ToList(); 
} 

このようなルックスを結合するための私のXAMLコードを持っています。

私の次のステップは、リストボックスで選択された代表者の画像/写真を自分のウィンドウ/フォームに表示することです。私はこのようなTextBlock内の年齢プロパティでそれをやった:

<TextBlock ... Text="{Binding ElementName=_listBox1, Path=SelectedItem.Age}" /> 

が、私は私のWPFウィンドウに画像を取得する方法は考えています。

私はDBにinsterting前の画像(-path)をロードするためにopenFileDialogを使用してこの

byte[] image = File.ReadAllBytes(@imagepath); 
... 
sqlcommandobject.Parameters.Add(new SqlParameter("@Photo", image)); 
... 

のように画像を保存します。ちょうど取り引きが私の問題です。私は本当にそれがこの時点であるとして結合のようなシンプルを維持したいと思いますが、私はこのような何かを行うことによって画像を取得する方法はありません推測:

<Image ... Source="{Binding ElementName=_listBox, Path=SelectedItem.Photo}" /> 

バイナリデータを再変換する必要があるとしてイメージオブジェクト(?)に、そして私はそれを行う方法に失われて、バインディングでこれをconbineします。誰でもアイデアはありますか?

読んでいただきありがとうございます!

答えて

2

あなたはbyte[]からBitmapSourceに値を変換するコンバータを作成することができます

[ValueConversion(typeof(byte[]), typeof(BitmapSource))] 
public class ByteArrayToImageConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     byte[] bytes = (byte[]) value; 
     using (MemoryStream ms = new MemoryStream(bytes)) 
     { 
      BitmapImage image = new BitmapImage(); 
      image.BeginInit(); 
      image.StreamSource = ms; 
      image.EndInit(); 
      return image; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     BitmapSource image = (BitmapSource) value; 
     BitmapEncoder encoder = new PngBitmapEncoder(); 
     encoder.Frames.Add(BitmapFrame.Create(image)); 
     using (MemoryStream ms = new MemoryStream()) 
     { 
      encoder.Save(ms); 
      return ms.ToArray(); 
     } 
    } 
} 

ConvertBack方法はPNGにエンコードし、あなたのニーズに応じていることを変更することができますまたはあなたがConvertBackを必要としない場合があります。まったく...)

関連する問題