2013-07-10 29 views
1

我放棄了我的代碼錯誤,所以我決定寫在這裏。我真的希望得到一個解決方案。我想要的列表框是:當我點擊按鈕時,它將從數據庫檢索數據,然後將其加載到列表框中。它運行良好。但是當我添加wpf風格時,它開始出現問題,因爲我想將圖像添加到文本旁邊的每個項目中 - 圖像(右側)和文本(左側)。列表框中的結果是空白的,但實際上它似乎有一個數據列表 - 請看圖片。我可能在我的代碼或wpf中做了錯誤的事情。我不知道什麼是問題....如果你能看看我的代碼,我將不勝感激。您提供的代碼將會非常有用。非常感謝!c#和wpf危機與空白列表框項目

WPF:

<ListBox Name="lstDinner" DisplayMemberPath="Name" Margin="513,85,608,445" Style="{DynamicResource ResourceKey=styleListBox}"/> 

WPF風格:

<DataTemplate x:Key="templateListBoxItem"> 
    <Grid Margin="5"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"></ColumnDefinition> 
      <ColumnDefinition Width="*"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition></RowDefinition> 
      <RowDefinition></RowDefinition> 
     </Grid.RowDefinitions> 
     <Border Grid.Column="0" 
       Grid.Row="0" 
       Grid.RowSpan="2" 
       Margin="0,0,10,0"> 
      <Image Source="{Binding Path=Image}" 
        Stretch="Fill" 
        Height="40" 
        Width="40"></Image> 
     </Border> 
     <TextBlock Text="{Binding Path=Name}" 
        FontWeight="Bold" 
        Grid.Column="1" 
        Grid.Row="0"></TextBlock> 
     <TextBlock Text="{Binding Path=About}" 
        Grid.Column="1" 
        Grid.Row="1"></TextBlock> 
    </Grid> 
</DataTemplate> 

<Style x:Key="styleListBox" TargetType="{x:Type ListBox}"> 
    <Setter Property="ItemTemplate" Value="{StaticResource ResourceKey=templateListBoxItem}"></Setter> 
</Style> 

C#:

private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     _dinnerExtractor = new DinnerExtractor(); 
     const int oneDay = 1; 

     _databaseDinnerList = new ObservableCollection<FoodInformation>(_dinnerExtractor.GetDinnerDays(oneDay)); 

     if (_databaseDinnerList != null) 
     { 
      foreach (var list in _databaseDinnerList) 
      { 

       lstDinner.Items.Add(new FoodInformation { Dinner = list.Dinner, DinnerImage = list.DinnerImage}); 
      } 

      //lstDinner.ItemsSource = _databaseDinnerList; 
     } 
    } 

enter image description here

+2

@kmatyaszek在他的回答下面是正確的。爲了將來的參考,如果你在運行你的程序時看到輸出窗口,你應該看到綁定錯誤出現在這種情況下,這應該是一個線索,這是你的問題。當我的視圖中出現錯誤時,我總是先看看那裏! :) – Steve

回答

0

FoodInformation類不包含的屬性:ImageName(您正在嘗試綁定到DataTemplate中的這些屬性)。

從代碼的背後,我們可以創建性能DinnerDinnerImageFoodInformation類的定義:

class FoodInformation 
{ 
    public string Dinner { get; set; } 
    public ImageSource DinnerImage { get; set; } 
} 

所以,你應該結合性能DinnerDinnerImage,不ImageName

如果更改DataTemplate相應的屬性名稱,則一切都會正常。

<DataTemplate x:Key="templateListBoxItem"> 
    <Grid Margin="5"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"></ColumnDefinition> 
      <ColumnDefinition Width="*"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
     <Grid.RowDefinitions> 
      <RowDefinition></RowDefinition> 
      <RowDefinition></RowDefinition> 
     </Grid.RowDefinitions> 
     <Border Grid.Column="0" 
       Grid.Row="0" 
       Grid.RowSpan="2" 
       Margin="0,0,10,0"> 
      <Image Source="{Binding Path=DinnerImage }" 
        Stretch="Fill" 
        Height="40" 
        Width="40"></Image> 
     </Border> 
     <TextBlock Text="{Binding Path=Dinner }" 
        FontWeight="Bold" 
        Grid.Column="1" 
        Grid.Row="0"></TextBlock> 
    </Grid> 
</DataTemplate> 
+0

我使用數據庫中的二進制圖像並將其轉換爲圖像。即時通訊不使用圖像文件路徑。如何解決這個問題? – user1358072

+0

@ user1358072關於這個問題,你可以在這裏找到答案:http://stackoverflow.com/questions/4418087/how-to-retrieve-images-from-sql-server-database-into-wpf-form-linq-databindi – kmatyaszek

+0

它現在解決了非常感謝 – user1358072