这应该非常简单,但我不能让它起作用......
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>
CustomItem看起来像这样
public class CustomItem
public Image ThumbnailImage { get; set; }
}
运行时,ListBox中没有任何内容出现。知道出了什么问题吗?谢谢!
- 编辑1 - 我想从调试中可以看出,当AvailableItems.Count == 5时,closet.Items.Count == 0我尝试添加ItemsSource =“{Binding AvailableItems,UpdateSourceTrigger = PropertyChanged}“但这没有用:(
- 编辑2 -
我在XAML中执行了以下操作
DataContext="{Binding RelativeSource={RelativeSource Self}}"
相反,当我在代码隐藏中执行以下操作时,一切正常:
DataContext = this;
答案 0 :(得分: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
将它与您的版本进行比较,看看您缺少什么
答案 1 :(得分: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;
}