2009-09-03 101 views
3

(我们使用OpenID的时间有多长?我似乎没有一个连接到任何提供商,并且在这个星球上没有任何常见问题解答似乎告诉您在丢失OpenID时该做什么。我不得不创建一个新的帐户,唉!)WPF Listbox来自数据库的图片

我试图从数据库中填充(传送带)列表框,但我无法获取要显示的图像。在网络上的每一个例子假设你有两个或三个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的内容,但是,它显示正常。我究竟做错了什么?

回答

3

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

+0

咄!当然!这会教会我复制示例并粘贴而不尝试完全理解它们。谢谢。 – SteveCav 2009-09-03 02:30:43

0

因为你的“ItemImage”属性已经是一个形象,你也许可以只使用一个ContentControl中直接显示图像闪避:

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