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文件
<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
属性?
答案 0 :(得分:1)
我强烈建议您阅读一些关于WPF的教程。看起来你需要一些WPF基础知识。您的代码无法正常工作的原因很多......
我建议将this one用于WPF DataGrid和WPF 4 Unleashed(Amazon.com)作为一般的WPF阅读材料。
您的ViewModel需要实现INotifyChanged接口,以便UI知道在何处以及何时查找已更改的属性。
在 setter - 而非getter 中,您需要调用PropertyChangedEvent
来通知UI对其做出反应。
只有一个吸气剂的代码太多了。每次调用属性getter时都会打开数据库连接。 getter应该只返回一个简单的值而无需访问昂贵的资源。 (Hava看看微软的Rico Marian关于这个主题的博客here。)