2013-04-23 76 views
0

我正在寻找一种方法,我如何以编程方式将一列显示图像添加到数据网格。我一直在寻找如何找到解决方案很长一段时间没有成功。Datagrid图像列以编程方式添加wpf

我现在做它的方式是这样的:

DataGridTemplateColumn col1 = new DataGridTemplateColumn(); 
col1.Header = "Betaald"; 
FrameworkElementFactory factory1 = new FrameworkElementFactory(typeof(System.Windows.Controls.Image)); 
Binding b1 = new Binding("Picture") { Mode = BindingMode.TwoWay }; 
factory1.SetBinding(System.Windows.Controls.Image.SourceProperty, b1); 
DataTemplate cellTemplate1 = new DataTemplate(); 
cellTemplate1.VisualTree = factory1; 
col1.CellTemplate = cellTemplate1; 
dtgVerkoopsdocumenten.Columns.Add(col1); 

这应该创建一个列在那里我可以显示图片。 所有数据,我从一个数据库,这是我在colums存储这样得到:

System.Windows.Controls.Image image = new System.Windows.Controls.Image(); //this is on top of my class 

MySqlDataReader reader = cmd.ExecuteReader(); 
while (reader.Read()) 
{ 
    string naam = getKlant(reader.GetInt32(2)); 

    if (reader.GetBoolean(7) == false) 
    { 
     BitmapImage betalen = new BitmapImage(new Uri("/WpfApplication1;component/Images/false.png", UriKind.Relative)); 
     image.Source = betalen; 
    } 
    else 
    { 
     BitmapImage betalen = new BitmapImage(new Uri("/WpfApplication1;component/Images/true.png", UriKind.Relative)); 
     image.Source = betalen; 
    } 

    dtgVerkoopsdocumenten.Items.Add(new DataItem 
    { 
     ID = reader.GetInt32(1), 
     klant = naam, 
     netto = reader.GetDouble(3), 
     btw = reader.GetDouble(4), 
     bruto = reader.GetDouble(5), 
     datum = reader.GetDateTime(6).ToString("dd-MM-yyyy"), 
     soort2 = soort, 
     Picture = image 
     }); 
    } 
    reader.Close(); 

DataItem的是自己制作类,我保存在我的所有绑定:

//more code, but the one below is the one I'm talking about 
public System.Windows.Controls.Image Picture { get; set; } 

我现在得到绝对没有。我没有得到任何错误。

所以我的问题是:如何将图像存储到数据网格中,而不必太多地混淆xaml文件。

输出:

System.Windows.Data Error: 1 : Cannot create default converter to perform 'two-way' conversions between types 'System.Windows.Controls.Image' and 'System.Windows.Media.ImageSource'. Consider using Converter property of Binding. BindingExpression:Path=Picture; DataItem='DataItem' (HashCode=435249); target element is 'Image' (Name=''); target property is 'Source' (type 'ImageSource') 
System.Windows.Data Error: 5 : Value produced by BindingExpression is not valid for target property.; Value='System.Windows.Controls.Image' BindingExpression:Path=Picture; DataItem='DataItem' (HashCode=435249); target element is 'Image' (Name=''); target property is 'Source' (type 'ImageSource') 
System.Windows.Data Error: 1 : Cannot create default converter to perform 'two-way' conversions between types 'System.Windows.Controls.Image' and 'System.Windows.Media.ImageSource'. Consider using Converter property of Binding. BindingExpression:Path=Picture; DataItem='DataItem' (HashCode=45279885); target element is 'Image' (Name=''); target property is 'Source' (type 'ImageSource') 
System.Windows.Data Error: 5 : Value produced by BindingExpression is not valid for target property.; Value='System.Windows.Controls.Image' BindingExpression:Path=Picture; DataItem='DataItem' (HashCode=45279885); target element is 'Image' (Name=''); target property is 'Source' (type 'ImageSource') 
+0

你需要它作为一个2路绑定模式?如果没有,请将其更改为单向 – 2013-04-23 15:40:11

+0

我试过这样做,唯一发生变化的是在输出窗口中“双向”到“单向”。 – 2013-04-23 15:44:36

+0

看看[这个答案](http://stackoverflow.com/a/3427387/1466627)修复你的图像到ImageSource错误。 – 2013-04-23 15:46:05

回答

0

您应该使用的,而不是SetValueSetBinding方法,因为你是分配结合的财产,而不是分配价值的财产。

来源:

factory1.SetValue(System.Windows.Controls.Image.SourceProperty, b1); 

要:

factory1.SetBinding(System.Windows.Controls.Image.SourceProperty, b1); 

你约束力的声明也可以写为:

Binding b1 = new Binding("Picture") { Mode = BindingMode.TwoWay }; 
+0

我仍然没有在我的datagrid。 – 2013-04-23 15:01:41

+0

@RobbeVanWinckel输出窗口中什么都没有? – 2013-04-23 15:14:27

+0

检查主帖以查看输出。 – 2013-04-23 15:21:12

相关问题