2013-06-19 5 views
5

Sto lavorando su un progetto in WPF utilizzando la struttura MVVM Light. Ho uno DataGrid associato a uno ObservableCollection<Worker>. A partire da ora, quando aggiungo un nuovo elemento, lo DataGrid non si aggiorna e credo che sia perché il setter non spara mai.ObservableCollection setter non si attiva quando viene aggiunto l'articolo

public ObservableCollection<Worker> MasterWorkerList 
{ 
    get { return _masterWorkerList; } 
    set 
    { 
     System.Windows.MessageBox.Show("Firing"); 
     _masterWorkerList = value; 
     RaisePropertyChanged(() => MasterWorkerList); 
    } 
} 

MessageBox non viene visualizzato, anche quando Io chiamo questo:

DataManager.Data.MasterWorkerList.Add(_create.NewWorker()); 

Come posso ottenere RaisePropertyChanged al fuoco in modo da poter aggiornare l'interfaccia utente?

Ho provato con le soluzioni in questo post inutilmente: ObservableCollection not noticing when Item in it changes (even with INotifyPropertyChanged)

Qualsiasi consiglio sarebbe apprezzato. Se hai bisogno di più del mio codice, faccelo sapere.

risposta

9

Non si dovrebbe avere un setter pubblico sugli elenchi dei propri oggetti. Si dovrebbe piuttosto impostare ut up nel costruttore

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

L'evento CollectionChanged viene chiamato quando si Add qualcosa al ObservableCollection. Se è necessario un controllo più radicato, è possibile ereditare da ObservableCollection e sovrascrivere i metodi AddItem e RemoveItem.