xaml 中的 WPF ObservableCollection

2024-04-02

我在用户控件的代码后面创建了一个 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(使用前将#替换为@)

xaml 中的 WPF ObservableCollection 的相关文章

随机推荐