Изменение источника изображения во время выполнения не отображает изображение - PullRequest
2 голосов
/ 23 августа 2011

Я пытаюсь отобразить изображение в ListBox.ItemTemplate в зависимости от его значения привязки, значение привязки - это состояние объекта (ожидающий, извлеченный, опубликованный, завершенный или ошибочный), вот XAML для элемента Image .

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

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

Я добавил 2 изображения (Badge_tick, Badge_cross) в ресурс проекта и использую интерфейс IValueConverter, чтобы преобразовать статус в изображение, которое будет отображаться в шаблоне. Вот класс 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 в своих классах, чтобы интерфейс знал, когда свойство изменяется автоматически, и я сразу понял, что это не проблема:)

Я пробирался через университет Google и видел множество постов с такой же проблемой в принципе, но не нашел решения при использовании интерфейса конвертера и ресурсов проекта.

Кто-нибудь может помочь? Заранее спасибо

Все мои другие классы IValueConverter работают отлично, только не этот.

Ответы [ 2 ]

1 голос
/ 23 августа 2011

Попробуйте вернуть BitmapSource вместо Bitmap

Биты для изменения:

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

и вернуть BitmapImage как в:

return new BitmapImage(new Uri("pack://application:,,,/Resources/Image1.png"));
0 голосов
/ 23 августа 2011

Я подозреваю, что проблема может заключаться в использовании вами стандартного класса 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

...