6

我正在使用 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开火以便更新 UI?

我尝试使用这篇文章中的解决方案无济于事:ObservableCollection not noticeing when Item in it changes (even with INotifyPropertyChanged)

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

4

1 回答 1

12

您不应该在您的对象的列表中使用公共设置器。你应该在你的构造函数中设置

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如果您需要更根深蒂固的控制,您可以从 and 继承ObservableCollectionand 覆盖AddItemandRemoveItem方法。

于 2013-06-19T05:59:42.960 回答