开发者

Bind image to datagrid using resources

开发者 https://www.devze.com 2023-03-09 17:19 出处:网络
I am trying to retrieve the image from resource file and tryin to bind it to the datagrid of my WPF application.

I am trying to retrieve the image from resource file and tryin to bind it to the datagrid of my WPF application.

The datagrid is somewhat like this:

<DataGridTemplateColumn Header="Image" Width="45">
  <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Image  Source="{Binding Path=Icon}" />
                    </DataTemplate>
 </DataGridTemplateColumn.CellTem开发者_开发技巧plate>

And Image is a property of type image of my MVVm class like this:

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

And in the code behind Im tryin to do something like this to get image from resource file and tryin to bind it to datagrid column.

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

Image image = bitmap;
return image;

I can see that image is populated but it is not displaying in the grid.


You should bind to an ImageSource instead of Image.

we use this helper class:

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);
    }
}

It creates an ImageSource from Bitmap or resource images.

Usage is

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

or

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

if the image is contained in an other assembly than the currently calling assembly.

The path of your image is the path starting at the project file root of your assembly. Say you have an folder images your path will be "images/somepicture.png".


I think the problem is that you are binding to the wrong property. Try this:

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

精彩评论

暂无评论...
验证码 换一张
取 消