在运行时更改图像源不会显示图像

时间:2011-08-23 09:10:36

标签: wpf c#-4.0 binding ivalueconverter imagesource

我试图在ListBox.ItemTemplate中显示一个Image,具体取决于它的绑定值,绑定值是一个对象的状态(挂起,检索,发布,完成或错误),这里是Image元素的XAML

<Window.Resources>
    <local:StatusImageConverter x:Key="StatusImage" />
</Window.Resources>

<Image Source="{Binding Path=Status, Converter={StaticResource StatusImage}}" />

我已将2个图像(Badge_tick,Badge_cross)添加到Project资源,并使用IValueConverter接口将状态转换为将在模板中显示的Image,这里是Converter类

[ValueConversion(typeof(PreTripItem.PreTripItemStatus), typeof(Bitmap))]
public class StatusImageConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        PreTripItem.PreTripItemStatus status = (PreTripItem.PreTripItemStatus)value;

        switch (status)
        {
            case PreTripItem.PreTripItemStatus.Complete:
                return new Bitmap(Properties.Resources.Badge_tick);
            case PreTripItem.PreTripItemStatus.Error:
                return new Bitmap(Properties.Resources.Badge_cross);
            default:
                return null;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();  //Does not need to be converted back
    }
}

这构建/编译正常并运行但是当状态改变时,图像不会显示在TemplateItem中。我在我的类中使用INotifyPropertyChanged接口,因此接口知道属性何时自动更改,所以我立即知道这不是问题:)

我已经浏览了谷歌大学,并且在原则上看到了很多相同问题的帖子,但在使用转换器界面和项目资源时没有找到解决方案。

有人可以帮忙吗?提前致谢

我所有其他的IValueConverter类都运行得很好,而不是这个。

2 个答案:

答案 0 :(得分:1)

尝试在 Bitmap

中返回 BitmapSource 类型

要改变的地方:

[ValueConversion(typeof(PreTripItem.PreTripItemStatus), typeof(BitmapSource))] 

并返回一个BitmapImage,如下所示:

return new BitmapImage(new Uri("pack://application:,,,/Resources/Image1.png"));

答案 1 :(得分:0)

我怀疑问题可能在于你使用的是标准的Bitmap类,它不是ImageSource派生类型。

您需要使用ImageSource类型: http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.aspx

如果您不了解包URI,请查看此信息: http://msdn.microsoft.com/en-us/library/aa970069.aspx