2009-09-03 100 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}" />