添加项目时,ObservableCollection setter不会触发

时间:2013-06-19 05:55:14

标签: c# mvvm mvvm-light

我正在使用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)

任何建议都将不胜感激。如果您需要更多我的代码,请告诉我。

1 个答案:

答案 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并覆盖AddItemRemoveItem方法。