如何在WPF,C#中将图像缩略图和常规文本列添加到datagrid?

时间:2018-08-21 01:24:18

标签: c# wpf image datagrid

我想从csv文件中检索数据(它们都是图像参数),并将其显示在datagrid中。旁边,每个条目我要显示图像的缩略图。如何在数据网格中同时包含图像和其他条目? 所以,这里有

实体

public class ImageProperties
{
     public string ImageThumbNailPath{ get; set;}
     public string ImageFileName{ get; set;}
     public double Sharpness{ get; set;}
     public int ImageWidth{ get; set;}
     public int ImageHt{ get; set;}
     ...
}

Xaml

<DataGrid x:Name="dataGridView" ItemsSource="{Binding ImagePropertiesList}" AutoGenerateColumns="False">
                    <DataGrid.Columns>
                        <DataGridTemplateColumn Header="Image">
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <Image Height="25" Width="50" Source="{Binding ImageThumbNailPath}" />
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
                    </DataGrid.Columns>
                    </DataGrid>

从ViewModel:

var ImagePropertiesList = new ObservableCollection<ImageProperties>();
ImagePropertiesList.Add(new ImageProperties() { 
ImageThumbNailPath=@"C:\Users\imgIcon.tif", ImageFileName="imgIcon.tif", 
Sharpness = 4.5, ImageWidth=50, ImageHt = 50 });

在上面,我既看不到图像,也看不到文本数据……我看到我没有启用显示文本的方法,但不确定与图像结合时该怎么做。

我的ImageProperties类可能会被修改为包括更多属性,因此我不想为每个属性包括以下内容。

<DataGridTextColumn Header="ImageWidth" Binding="{Binding ImageWidth}"/>

有没有办法我仍然可以在第一列中显示图像,并在随后的列中显示所有其他属性?请指导我。

1 个答案:

答案 0 :(得分:0)

ImagePropertiesList 必须是ViewModel中的公共属性。

public ObservableCollection<ImageProperties> ImagePropertiesList
{
    get;
    set;
}

进行此更改后,您只需从当前的 ImagePropertiesList

实例中删除 var
ImagePropertiesList = new ObservableCollection<ImageProperties>();

如果这不起作用,请确保将DataContext设置为ViewModel。