ListBox没有获得更新的WPF

时间:2014-11-13 22:51:16

标签: c# wpf listbox observablecollection inotifypropertychanged

包装类:

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");
        }
}

这是我将ListBox绑定到ObservableCollection的方法: 代码隐藏:

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

XAML:

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

然而,当我在Collection中添加一个新条目时,ListBox不会更新。我试过调试,看看是否至少将新条目添加到Collection中 - 它是。

从我所做的研究和试训中,这对我来说都是正确的。任何想法,我错过了什么或做错了什么?

1 个答案:

答案 0 :(得分:1)

如果你想要做的只是添加到列表中,那么你就不需要任何包装类或任何事件,因为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);
}

会导致新项目自动显示。