Установить ImageSource через ViewModel не работает

У меня есть приложение WPF, в котором я использую несколько изображений. Большинство изображений установлено в XAML-коде, так как они больше не будут меняться. Для Build Action всех моих файлов изображений установлено значение "Ресурс", а для Copy to Output Directory установлено значение "Не копировать" < / сильный>. Они показаны, как и ожидалось, вот пример того, как они установлены:

<ribbon:RibbonApplicationMenu SmallImageSource="/Voetbal;component/Images/Ball_16.png">
//or
<ribbon:RibbonButton LargeImageSource="/Voetbal;component/Images/Calendar_32.png" />
//or
<Image Source="/Voetbal;component/Images/remove.png" Width="16" Height="16" />

Но у меня также есть изображения, которые нужно установить через C #. В UserControl у меня есть ListView, который содержит определенный столбец со следующей разметкой:

<GridViewColumn Header="" Width="32">
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <Image Source="{Binding Icon}" />
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

ItemsSource для ListView - это универсальный список, содержащий экземпляры элементов, которые будут объединять ListView. Эти элементы имеют два строковых поля и ImageSource (с именем «Icon»). Я установил свойство Icon следующим образом:

var icon = new BitmapImage(new Uri("/Images/Gold_16.png", UriKind.RelativeOrAbsolute));
myViewModel.Items[0].Icon = icon;

Но проблема в том, что я не вижу изображения в ListView. Я также пробовал следующие фрагменты кода. Я использовал эти фрагменты из ответов на аналогичные вопросы здесь, на SO, и на других форумах. Не то чтобы я поленился или ничего не пробовал, но я не могу понять, как это исправить ...

var icon = new BitmapImage(new Uri("/Voetbal;component/Images/Gold_16.png", UriKind.RelativeOrAbsolute));

//or
var icon = new BitmapImage();
icon.BeginInit();
icon.UriSource = new Uri("pack://application:,,,/Voetbal;component/Images/Gold_16.png");
icon.EndInit();

//or
var icon = new BitmapImage();
icon.BeginInit();
icon.UriSource = new Uri("pack://application:,,,/Images/Gold_16.png");
icon.EndInit();

PS: Я знаю, что привязка моей модели ViewModel работает, потому что два строковых свойства правильно отображаются в других столбцах ListView.

Кто-нибудь знает, как я могу установить ImageSource и правильно привязать его к ListView?

Заранее спасибо!


person Abbas    schedule 09.10.2012    source источник
comment
Есть ли ошибки привязки в окне вывода? Кстати, свойство Icon вашей модели представления может быть string, создавать ImageSource в коде не нужно.   -  person Dennis    schedule 09.10.2012
comment
Никаких ошибок привязки или исключений, что бы то ни было. Итак, вы имеете в виду, что Icon может быть строкой, но какое тогда должно быть значение? Потому что я попробовал предложение Эхсана, и это не сработало.   -  person Abbas    schedule 09.10.2012
comment
Значение должно быть URI пакета: msdn.microsoft.com/en-us/library /aa970069.aspx   -  person Dennis    schedule 09.10.2012
comment
Как вы можете видеть в моем исходном посте, я пробовал несколько способов. Поэтому у меня вопрос: какова тогда должна быть ценность?   -  person Abbas    schedule 09.10.2012
comment
Вызывает ли ваше Icon свойство PropertyChange уведомление при изменении?   -  person Rachel    schedule 09.10.2012
comment
Нет, но действительно ли это необходимо? Другие свойства (строка) также не вызывают этого, и они работают нормально ...   -  person Abbas    schedule 10.10.2012
comment
Я тестирую дополнительный код: StackOverFlow_ListView   -  person tobsen    schedule 10.10.2012


Ответы (1)


myViewModel.Items[0].Icon = "Images/Gold_16.png";

Пожалуйста, попробуйте приведенный выше код. Сделайте свойство Icon строковым

person Ehsan Aleem Avee    schedule 09.10.2012