列表框不会更新 WPF

本文关键字:更新 WPF 列表 | 更新日期: 2023-09-27 18:30:23

包装类:

public class Multimedia : INotifyPropertyChanged
{
   //... constructor
   //... empty constructor
   //... getters and setters for properties
   public event PropertyChangedEventHandler PropertyChanged;
   public void OnPropertyChanged(string name)
   {
       PropertyChangedEventHandler handler = PropertyChanged;
       if (handler != null)
       {
           handler(this, new PropertyChangedEventArgs(name));
       }
   }
}

该系列:

public class MultiMediaList : ObservableCollection<Multimedia>
{
        Multimedia mediaWrapper = new Multimedia();
        //... constructor with creating several default objects of Multimedia
        public void addMedia(string title, string artist, string genre, MediaType type)
        {
            this.Add(new Multimedia(title, artist, genre, type));
            mediaWrapper.OnPropertyChanged("MultiMediaList");
        }
}

这就是我将列表框绑定到可观察集合的方式:代码隐藏:

public partial class MainWindow : Window
{
        MultiMediaList mediaList;
        public MainWindow()
        {
            InitializeComponent();
            mediaList = new MultiMediaList();
            LB_media.ItemsSource = mediaList;
        }
}

XAML:

<ListBox Name="LB_media" DisplayMemberPath="Title" ... />

但是,当我在集合中添加新条目时,列表框不会更新。我尝试调试,以查看是否至少将新条目添加到集合中 - 确实如此。

从我所做的研究和试用来看,这一切对我来说都是正确的。任何想法我在哪里错过了什么或做错了什么?

列表框不会更新 WPF

如果您只想添加到列表中,则不需要任何包装类或任何事件,因为ObservableCollection已经实现了INotifyCollectionChanged

public class MultiMediaList : ObservableCollection<Multimedia>
{
    //... constructor with creating several default objects of Multimedia
    public void addMedia(string title, string artist, string genre, MediaType type)
    {
        this.Add(new Multimedia(title, artist, genre, type));
    }
}

就是这样。 保持MainWindow不变。 如果向窗体添加按钮,

private void Button_Click(object sender, RoutedEventArgs e)
{
    mediaList.addMedia("ccc", "ccc", "ccc", MediaType.Whatever);
}

将导致新项目将自动显示。