WPF Listbox Изображения от база данни

(От колко време използваме OpenIDs? Изглежда нямам такъв, свързан с който и да е доставчик и нито един ЧЗВ на планетата изглежда не ви казва какво да правите, когато загубите своя 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 успешно от db (използвайки байтов масив за изображението) и се опитвам да покажа името и изображението с

    <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 е просто:

<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