我正在使用MVVM Light框架在WPF中开发一个项目。我有DataGrid
绑定到ObservableCollection<Worker>
。截至目前,当我添加新项目时,DataGrid
不会更新,我相信这是因为setter永远不会触发。
public ObservableCollection<Worker> MasterWorkerList
{
get { return _masterWorkerList; }
set
{
System.Windows.MessageBox.Show("Firing");
_masterWorkerList = value;
RaisePropertyChanged(() => MasterWorkerList);
}
}
即使我打电话给它,消息框也不会显示:
DataManager.Data.MasterWorkerList.Add(_create.NewWorker());
如何才能启动RaisePropertyChanged
以便我可以更新用户界面?
我尝试使用这篇文章中的解决方案无济于事:ObservableCollection not noticing when Item in it changes (even with INotifyPropertyChanged)
任何建议都将不胜感激。如果您需要更多我的代码,请告诉我。
答案 0 :(得分:10)
您的对象列表中不应包含公共设置器。您应该在构造函数中设置
public MyClass(){
_masterWorkerList = new ObservableCollection<Worker>();
_masterWorkerList.CollectionChanged += OnCollectionChanged;
}
public ObservableCollection<Worker> MasterWorkerList
{
get { return _masterWorkerList; }
}
private void OnCollectionChanged(object sender, NotifyCollectionChangedEventArgs e){
System.Windows.MessageBox.Show("Firing");
//RaisePropertyChanged(() => MasterWorkerList);
}
当您向ObservableCollection CollectionChanged
时,会调用Add
事件。如果您需要更多根深蒂固的控制权,则可以继承ObservableCollection
并覆盖AddItem
和RemoveItem
方法。