可编辑字典<string,bitmapimage =“”>作为不同Assembly中的资源

时间:2018-01-14 15:57:43

标签: c# wpf xaml

我有Dictionary<>张图片和相应的密钥。

Dictionary<string, BitmapImage> ImageDictionary { get; set; }

Dictionary<>以一些预定义图像开始,但随着应用程序的运行,用户可以向列表中添加更多图像和密钥。

我想在XAML中引用这些图像......

<Image Source="{Binding ImageDictionary['SomeImageKey']" />

这似乎是一个典型的要求,但在谷歌搜索的最后两个小时内,我似乎无法找到任何允许我添加到列表中的方法,并提供简洁的XAML语法来引用图像。

谢谢!

更新 ...感谢@Evk让我99%的路上!!

在包含Dictionary<string, BitmapImage>的单例实例的另一个程序集中,我有以下内容:

namespace MyOtherAssembly {
public class ImageManager
{

    private ImageManager()
    {
        KeyToImage = new Dictionary<string, BitmapImage>();
        PopulateResourceImages();
    }

    private static readonly Lazy<ImageManager> _Instance = new Lazy<ImageManager>(() => new ImageManager());
    public static ImageManager Instance { get { return _Instance.Value; } }

    public Dictionary<string, BitmapImage> KeyToImage { get; set; }

    public void PopulateResourceImages() { ... }
} }

PopulateResourceImages()只加载预定义的图片。

现在在我的用户控件中,我添加了以下XAML命名空间:

xmlns:img="clr-namespace:MyOtherAssembly;assembly=MyOtherAssembly"

最后在XAML中,我添加了以下绑定:

            <Image Source="{Binding Source={x:Static img:ImageManager.Instance}, Path=KeyToImage[RightArrowInCircle]}" Width="20" Height="20" />

其中RightArrowInCircle是其中一个键。

所以我现在有一个图像字典,可以修改和添加到,并且具有合理的XAML语法。

有更好的方法吗??!

1 个答案:

答案 0 :(得分:1)

你可以像这样绑定(只是省略引号):

<Image Source="{Binding ImageDictionary[SomeImageKey]}" />