如何在DataGrid中绑定类的图像

时间:2019-07-09 15:12:46

标签: c# wpf image binding

我有一个ViewModel类,在其中设置图像。我在此属性上设置了1张图像或另一张图像,但无法显示它。

我创建一个DataGridTemplateColumn,在其中设置一个DataTemplate和一个图像。我将此列设置为datagrid,但无法将类的属性设置为图像。

Image ImgRed = new Image();
Image ImgGreen = new Image();
BitmapImage red = new BitmapImage(new Uri(@"C:\ProjetVisual\SmartieWpf\SmartieWpf\Img\bullet_red.png"));
BitmapImage green = new BitmapImage(new Uri(@"C:\ProjetVisual\SmartieWpf\SmartieWpf\Img\bullet_green.png"));
ImgRed.Source = red;
ImgGreen.Source = green;
if(item.Visibility == Visibility.Collapsed)
{
    item.Image = ImgGreen;
}
else
{
    item.Image = ImgRed;
}

DataGridTemplateColumn colDiff = new DataGridTemplateColumn
                {
                    Header = "Etat"
                };
double imgSize = 20.0;
DataTemplate DttEtat = new DataTemplate();
FrameworkElementFactory image = new FrameworkElementFactory(typeof(Image));
image.SetValue(Image.HeightProperty, imgSize);
image.SetValue(Image.WidthProperty, imgSize);
image.SetBinding(Image.SourceProperty, new Binding("Image.Source") { Source = bordereauViewModels });
image.SetValue(Image.SourceProperty, green);
DttEtat.VisualTree = image;
colDiff.CellTemplate = DttEtat;
dgBordereaux.Columns.Add(colDiff);

bordereauViewModels是我浏览以在班级中设置图像的列表。

2 个答案:

答案 0 :(得分:0)

理想情况下,当您拥有View模型时,不应在后面创建任何控件代码。您可以为特定的网格创建图像的依赖属性类型,也可以在

之类的XAML中创建tmeplate
<DataGridTemplateColumn Header="Image" Width="SizeToCells"
 IsReadOnly="True">
   <DataGridTemplateColumn.CellTemplate>
      <DataTemplate>
           <Image Source="{Binding Uri}" />
      </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
 </DataGridTemplateColumn>

Uri是您在Viewmodel中的路径。

答案 1 :(得分:-1)

我使用后面的代码生成网格的所有列,因此我不使用xaml。但是我找到了解决方案,在我的课堂上我写道:

public Image Image { get; set; }

其中图像是Windows.Controls.Image 但源是BitmapImage,我只需要红色和绿色即可。 我现在的功能代码是:

public BitmapImage Image { get; set; }

BitmapImage red = new BitmapImage(new Uri(@"C:\ProjetVisual\SmartieWpf\SmartieWpf\Img\bullet_red.png"));
BitmapImage green = new BitmapImage(new Uri(@"C:\ProjetVisual\SmartieWpf\SmartieWpf\Img\bullet_green.png"));
if(item.Visibility == Visibility.Collapsed)
{
    item.Image = green;
}
else
{
    item.Image = red;
}

DataGridTemplateColumn colDiff = new DataGridTemplateColumn
                {
                    Header = "Etat"
                };
double imgSize = 20.0;
DataTemplate DttEtat = new DataTemplate();
FrameworkElementFactory image = new FrameworkElementFactory(typeof(Image));
image.SetValue(Image.HeightProperty, imgSize);
image.SetValue(Image.WidthProperty, imgSize);
image.SetBinding(Image.SourceProperty, new Binding("Image"));
image.SetValue(Image.SourceProperty, green);
DttEtat.VisualTree = image;
colDiff.CellTemplate = DttEtat;
dgBordereaux.Columns.Add(colDiff);

谢谢您的帮助。