WPF и проблема с привязкой данных - PullRequest
0 голосов
/ 14 февраля 2012
public ImageSource imagesource
{
   get
   {
      string constring=@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource='C:\picdata.mdb'";
      OleDbConnection cn = new OleDbConnection(constring);

      cn.Open();
      OleDbDataAdapter da = new OleDbDataAdapter("select * from picdata", cn);
      DataSet ds = new DataSet();
      da.Fill(ds);
      cn.Close();

      var Img = new BitmapImage();
      Img.BeginInit();
      byte[] content = (byte[])ds.Tables[0].Rows[0].ItemArray[0];
      MemoryStream stream = new MemoryStream(content);
      Img.StreamSource = stream;
      Img.EndInit();

      return Img;
   }
}

XAML FILE

<my:DataGrid AutoGenerateColumns="True" Margin="308,12,255,50" Name="dataGrid3"  >
    <my:DataGridTemplateColumn Header="Image" >
        <my:DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <Image Name="display" Margin="201,29,0,0" Stretch="Fill" Source="{Binding imageSource}">      </Image> 
            </DataTemplate>
        </my:DataGridTemplateColumn.CellTemplate>
    </my:DataGridTemplateColumn>
</my:DataGrid>

Свойство imagesource не вызывается. У вас есть предложения?
Я успешно выполнил преобразование и привязку с использованием C # и DataGridView, но я не могу понять это с помощью WPF. Я совершенно новичок в WPF, поэтому любая помощь будет принята с благодарностью.
Как еще можно успешно привязать базу данных доступа, содержащую изображения (требуется преобразование), к DataGrid? Почему не выполняется свойство imagesource?

1 Ответ

1 голос
/ 14 февраля 2012

Я настоятельно рекомендую вам прочитать некоторые учебники по WPF.Похоже, вам нужны базовые знания WPF.Существует так много причин, по которым ваш код не будет работать ...

Я рекомендую этот для WPF DataGrid и WPF 4 Unleashed (Amazon.com) какхорошее прочтение о WPF в целом.

  • Ваш ViewModel должен реализовать интерфейс INotifyChanged, чтобы пользовательский интерфейс знал, где и когда искать измененные свойства.

  • В установщике - , а не в получателе - вам необходимо вызвать PropertyChangedEvent, который уведомляет пользовательский интерфейс о том, что на него нужно реагировать.

  • Слишком много кода для получения.Ваше соединение с базой данных будет открываться каждый раз, когда вы звоните получателю собственности.Получатель должен просто вернуть простое значение без доступа к дорогим ресурсам.(Посмотрите блог Microsoft Rico Marian на эту тему здесь .)

...