列表框不会更新 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" ... />
但是,当我在集合中添加新条目时,列表框不会更新。我尝试调试,以查看是否至少将新条目添加到集合中 - 确实如此。
从我所做的研究和试用来看,这一切对我来说都是正确的。任何想法我在哪里错过了什么或做错了什么?
如果您只想添加到列表中,则不需要任何包装类或任何事件,因为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);
}
将导致新项目将自动显示。