使用资源将图像绑定到数据网格

时间:2011-06-01 20:19:58

标签: c# wpf image datagrid

我正在尝试从资源文件中检索图像,并尝试将其绑定到我的WPF应用程序的数据网格。

datagrid有点像这样:

<DataGridTemplateColumn Header="Image" Width="45">
  <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Image  Source="{Binding Path=Icon}" />
                    </DataTemplate>
 </DataGridTemplateColumn.CellTemplate>

Image是我MVVm类的图像类型的属性,如下所示:

 public Image Icon
    {
        get { return _licenseImage; }
        set { _licenseImage = value;
        PropertChanged("Icon");}
    }

在后面的代码中我试着做这样的事情从资源文件中获取图像并尝试将其绑定到datagrid列。

ResourceManager resourceManager = 
        new ResourceManager("Resources.Images", Assembly.GetExecutingAssembly());
BitMap bitmap = resourceManager.GetObject("okimage") as BitMap;

Image image = bitmap;
return image;

我可以看到图像已填充但未显示在网格中。

2 个答案:

答案 0 :(得分:1)

您应该绑定到ImageSource而不是Image

我们使用这个助手类:

public static class ImageSourceHelper
{
    public static ImageSource GetResourceImage(string resourcePath)
    {
        return GetResourceImage(Assembly.GetCallingAssembly(), resourcePath);
    }

    public static ImageSource GetResourceImage(Assembly resourceAssembly, string resourcePath)
    {
        if (string.IsNullOrEmpty(resourcePath)) return null;

        var assembly = resourceAssembly.GetName().Name;
        const string uriFormat = "pack://application:,,,/{0};component/{1}";

        if (!UriParser.IsKnownScheme("pack")) new System.Windows.Application();

        var uri = new Uri(string.Format(uriFormat, assembly, resourcePath), UriKind.RelativeOrAbsolute);

        return BitmapFrame.Create(uri);
    }

    public static ImageSource ConvertFromGdiBitmap(Bitmap bitmap)
    {
        return Common.SystemAbstraction.Media.ImageConverter.ConvertToBitmapSource(bitmap);
    }

    public static Bitmap ConvertToGdiBitmap(ImageSource imageSource)
    {
        return Common.SystemAbstraction.Media.ImageConverter.ConvertToBitmap(imageSource as BitmapSource);
    }
}

它会从ImageSource或资源图片中创建Bitmap

用法是

img.Source = ImageSourceHelper("Path/To/Your/Image.png");

var resourceAssembly = // get resource assembly...
img.Source = ImageSourceHelper(resourceAssembly, "Path/To/Your/Image.png");

如果图像包含在当前调用程序集之外的其他程序集中。

图像的路径是从程序集的项目文件根开始的路径。 假设您有一个文件夹图像,您的路径将是"images/somepicture.png"

答案 1 :(得分:0)

我认为问题在于你绑定了错误的属性。试试这个:

<Image  Source="{Binding Path=Icon}" />