我在用户控件的代码后面创建了一个 ObservableCollection。它是在窗口加载时创建的:
private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
Entities db = new Entities();
ObservableCollection<Image> _imageCollection =
new ObservableCollection<Image>();
IEnumerable<library> libraryQuery =
from c in db.ElectricalLibraries
select c;
foreach (ElectricalLibrary c in libraryQuery)
{
Image finalImage = new Image();
finalImage.Width = 80;
BitmapImage logo = new BitmapImage();
logo.BeginInit();
logo.UriSource = new Uri(c.url);
logo.EndInit();
finalImage.Source = logo;
_imageCollection.Add(finalImage);
}
}
我需要获取基于数据库中保存的 url 创建的图像的 ObservableCollection。但我需要一个 ListView 或其他 ItemsControl 在 XAML 文件中绑定到它,如下所示:
但我不知道如何将 ObservableCollection 传递给该控件的 ItemsSource。我尝试创建一个类,然后在 xaml 文件中创建一个类的实例,但它不起作用。我应该以某种方式创建静态资源>
任何帮助将不胜感激。
首先,ObservableCollection 是一个局部变量。您需要做的是将其作为私有全局变量并将其公开为公共属性。您可以使用 INotifyPropertyChanged 接口在实际集合本身发生更改时自动更新图像数据。
在 XAML 中,您需要将 DataContext 设置为 self,然后可以直接将公共属性绑定到 ItemsSource。您可能希望使用 ItemTemplate 以自定义方式显示项目。
干杯,
亚当
根据要求示例:
In C#:
public MyWindowClass
{
public ObservableCollection<image> MyImageCollection
{
get;
set;
}
}
In XAML:
<UserControl
...
DataContext="{Binding RelativeSource={RelativeSource Self}}">
...
<ListBox ItemsSource="{Binding MyImageCollection}" ItemTemplate="*yourtemplateresource*" />
...
</UserControl>
现在,我提到使用 INotifyPropertyChanged 的原因是,如果您尝试:
MyImageCollection = new ObservableCollection<image>();
列表框中的项目不会自动更新。然而,使用 ObservableCollection,你可以not需要实现 INotifyPropertyChanged 来进行列表项的基本添加和删除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)