2012-02-14 7 views
0
public ImageSource imagesource 
{ 
    get 
    { 
     string [email protected]"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 FILEWPF и привязки проблема

<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

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

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

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

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

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