我有一个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是我浏览以在班级中设置图像的列表。
答案 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);
谢谢您的帮助。