【问题标题】:ObservableCollection setter isn't firing when item is added添加项目时 ObservableCollection 设置器未触发
【发布时间】:2013-06-15 13:10:49
【问题描述】:

我正在使用 MVVM Light 框架在 WPF 中开发一个项目。我有一个绑定到ObservableCollection<Worker>DataGrid。截至目前,当我添加一个新项目时,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 noticing when Item in it changes (even with INotifyPropertyChanged)

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

【问题讨论】:

    标签: c# mvvm mvvm-light


    【解决方案1】:

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

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

    CollectionChanged 事件在你 Add 到 ObservableCollection 时被调用。如果您需要更深入的控制,您可以继承 ObservableCollection 并覆盖 AddItemRemoveItem 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多