2011-03-10 85 views
3

这应该是非常简单的,但是我突出部分不能得到它的工作的的ObservableCollection ...WPF - 绑定列表框图像

CustomItem的是,有一个叫做ThumbnailImage 我想属性的类将ObservableCollection绑定到ListBox以显示图像。这是我的代码:

public ObservableCollection<CustomItem> AvailableItems { get; set; } 

<ListBox Width="103" Height="480" ItemsSource="{Binding AvailableItems}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Border BorderBrush="Black" BorderThickness="1"> 
      <ContentControl Content="{Binding Path=ThumbnailImage}" 
              Width="100" Height="100" /> 
      </Border> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

定制项目看起来像这样

public class CustomItem 
     public Image ThumbnailImage { get; set; } 
    } 

没有什么是显示了在列表框,当我运行它。任何想法出了什么问题?谢谢!

- 编辑1 -我想我可以从调试告诉是closet.Items.Count == 0时AvailableItems.Count == 5.我尝试添加的ItemsSource =“{结合AvailableItems,UpdateSourceTrigger =的PropertyChanged}”,但并没有帮助:(

- 编辑2 -

我在做我的XAML以下

DataContext="{Binding RelativeSource={RelativeSource Self}}" 

,而不是当我没说在代码隐藏下面,一切工作:

DataContext = this; 
+0

我也有类似的问题,因为你。虽然我的绑定工作,ContentControl显示一个字符串表示图像类型,而不是显示图像。我发现用替换的办法。如果有人绊倒在这,这可能会帮助他们。 – Fueled 2011-11-08 16:10:51

回答

3

您发布的代码似乎罚款,所以这个问题必须是别的东西

  • 是否ListBox有正确的DataContext的,因此它可以正确地绑定到AvailableItems
  • 你如何初始化代码中的Image

BitmapImage source = new BitmapImage(); 
source.BeginInit(); 
source.UriSource = new Uri(yourUriString, UriKind.RelativeOrAbsolute); 
source.EndInit(); 

ThumbnailImage = new Image(); 
ThumbnailImage.Source = source; 

我贴你的代码示例工程,它工作得很好,在这里上传它
http://www.mediafire.com/download.php?m99kv1uglrr31j9

比较它的版本,看看你错过了什么

+0

非常感谢您的上传,这是一个巨大的帮助。我仍然试图找出我的问题是什么,但到目前为止,我注意到我在做:DataContext =“{Binding RelativeSource = {RelativeSource Self}}”,而不是DataContext = this;这不是一样的。奇怪... – 2011-03-11 16:29:27

3

我猜你要么:
1)未初始化您的ObservableCollection
2)未设置窗口的DataContext,或者
3)将CustomItem添加到ObservableCollection并且您尚未在您的CustomItem类中实现INotifyPropertyChanged后,您正在设置图像。

你的代码加上这似乎为我工作:

public MainWindow() 
    { 
     InitializeComponent(); 
     this.AvailableItems = new ObservableCollection<CustomItem>(); 
     Image i = new Image(); 
     BitmapImage src = new BitmapImage(); 
     src.BeginInit(); 
     src.UriSource = new Uri(@"C:\Users\Public\Pictures\Sample Pictures/Desert.jpg"); 
     src.EndInit(); 
     i.Source = src; 
     i.Stretch = System.Windows.Media.Stretch.Fill; 

     CustomItem ci = new CustomItem(); 
     ci.ThumbnailImage = i; 

     this.AvailableItems.Add(ci); 
    } 


    private void Window_Loaded(object sender, RoutedEventArgs e) 
    { 
     this.DataContext = this; 
    } 
+0

非常感谢回复,我仍然通过我的代码看看有什么不同 – 2011-03-11 16:30:19

+0

@Greg R,你是否在做我正确列在顶部的三件事情?此外,在设置DataContext后,您不会重新设置AvailableItems集合(在这种情况下,您的列表框不会绑定到当前的“AvailableItems”集合,而是绑定第一次发生时设置的集合)。 – Scott 2011-03-11 16:59:17

+0

出于某种原因,它是一个DataContext问题(请参阅我的原始问题编辑#2)。即使我有解决方案,但我不明白为什么这两个陈述不相同。 – 2011-03-11 19:39:18