来自数据库的WPF列表框图像

时间:2009-09-03 02:16:13

标签: wpf data-binding listbox datatemplate

(我们使用OpenID已经有多长时间了?我似乎没有连接到任何提供商,并且地球上没有常见问题解答告诉您在丢失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显示ok,ItemImage不显示。我也试过了{Binding ItemImage}。大多数示例都使用{Binding Path=ItemImage},但这就是ItemImage是包含路径的字符串,而不是实际的图像本身。

我把头发拉了出来。我没做什么使图像出现。但是,如果我创建一个图像控件并手动分配ItemImage的内容,它就会显示正常。我做错了什么?

2 个答案:

答案 0 :(得分:3)

您的ItemImage属性是一个Image(控件)。使其成为ImageSource,例如System.Windows.Media.Imaging.BitmapImage。然后你可以绑定<Image Source="{Binding ItemImage}" />

答案 1 :(得分:0)

由于您的“ItemImage”属性已经是一个图像,您可以通过使用ContentControl直接显示图像来逃脱:

<ContentControl Content="{Binding Image}" />