Изображения списка WPF из базы данных

(Как долго мы используем OpenID? Кажется, я не подключил его к какому-либо провайдеру, и ни один FAQ на планете, кажется, не говорит вам, что делать, когда вы потеряете свой OpenID. Мне пришлось создать новую учетную запись. Арх!)

Я пытаюсь заполнить список (карусель) из базы данных, но не могу отобразить изображения. Каждый пример в сети предполагает, что у вас есть два или три файла в формате JPEG в папке, а не в памяти :(

Мой класс элемента:

public class PicCollection : ObservableCollection<CarouselItem>
{
    public PicCollection()
    {

    }
}
public class CarouselItem
{
    public int ItemID { get; set; }
    public string ItemName { get; set; }
    public string ItemDesc { get; set; }
    public Image ItemImage { get; set; }

    public CarouselItem(int NewItemID, string NewItemName, string NewItemDesc, Image newItemImage)
    {
        this.ItemID = NewItemID;
        this.ItemName = NewItemName;
        this.ItemDesc = NewItemDesc;
        this.ItemImage = newItemImage;
    }
}

Я успешно заполняю PicCollection из базы данных (используя массив байтов для изображения) и пытаюсь отобразить имя и изображение с помощью

    <DataTemplate x:Key="TestDataTemplate2"  >
        <StackPanel Orientation="Horizontal">
            <TextBlock x:Name="CarName" 
                           Text="{Binding ItemName}"  
                           Padding="15,15"
                           Foreground="Yellow" />
            <Image Source="{Binding Source=ItemImage}"
                   Stretch="Fill" />
            </StackPanel>
    </DataTemplate>

Список просто:

<ListBox Name="lstTest" ItemsSource="{StaticResource TestDataSource}" 
                ItemTemplate="{StaticResource TestDataTemplate2}"></ListBox>

ItemName отображается нормально, ItemImage — нет. Я тоже пробовал {Binding ItemImage}. В большинстве примеров используется {Binding Path=ItemImage}, но здесь ItemImage будет строкой, содержащей путь, а не само изображение.

Я выдергиваю волосы. Ничто из того, что я делаю, не заставляет изображения появляться. Однако, если я создаю элемент управления изображением и вручную назначаю содержимое ItemImage, он отображается нормально. Что я делаю неправильно?


person SteveCav    schedule 03.09.2009    source источник


Ответы (2)


Ваше свойство ItemImage представляет собой изображение (элемент управления). Сделайте его ImageSource, например System.Windows.Media.Imaging.BitmapImage. Затем вы можете связать <Image Source="{Binding ItemImage}" />.

person itowlson    schedule 03.09.2009
comment
ах! конечно! Это научит меня копировать и вставлять примеры, не пытаясь их полностью понять. Спасибо. - person SteveCav; 03.09.2009

Поскольку ваше свойство "ItemImage" уже является изображением, вы можете просто использовать ContentControl для прямого отображения изображения:

<ContentControl Content="{Binding Image}" />
person Matt Hamilton    schedule 03.09.2009