Как получить изображения из базы данных SQL Server в форму WPF ??(LINQ, привязка данных, SQL) - PullRequest
0 голосов
/ 11 декабря 2010

У меня есть дешевое окно, в которое я вставляю данные в базу данных.Мои db-столбцы следующие:

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

Теперь я хочу получить информацию из db в мое окно.У меня есть список, в котором я получаю такие имена (запрос LINQ)

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

_listBox1.ItemsSource = query.ToList();
}

Мой код xaml для привязки выглядит так:

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

, поэтому имена теперь отображаются всписок.

Мой следующий шаг - отобразить изображение / фотографию представителя, выбранного в списке в моем окне / форме.Я сделал это с помощью свойства age в текстовом блоке, как это:

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

, но я понятия не имею, как получить изображение в моем окне wpf.

Я сохраняю изображение следующим образом

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

с помощью openFileDialog для загрузки изображения (-path) перед вставкой в ​​базу данных.Просто поиск - моя проблема сейчас.Я действительно хотел бы сохранить привязку такой же простой, какой она является в данный момент, но я думаю, что нет способа извлечь изображение, выполнив что-то вроде этого:

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

Поскольку двоичные данные должны бытьпреобразован обратно в объект изображения (?), и я заблудился о том, как это сделать, и связал это с привязками.У кого-нибудь есть идея?

Спасибо за чтение!

Ответы [ 2 ]

2 голосов
/ 12 декабря 2010

Вы можете создать конвертер для преобразования значения из 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 ...)

0 голосов
/ 12 декабря 2010

Привязать изображение к ObjectDataProvider , который преобразует параметр в изображение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...