2010-04-28 1 views
0

У меня есть наблюдаемая коллекция объектов viewmodel. Как я могу подписаться на событие Property Changed для каждой модели представления в моей коллекции по мере их создания и отслеживать, какие из них были изменены, чтобы я мог обновить их в моей базе данных.Событие PropertyChanged ViewModel в ObservableCollection

ответ

2

Я считаю, что приведенный ниже код служит примером того, как решить вашу проблему. В этом примере MyCollection является объектом ViewModel свойства. ViewModel реализует интерфейс INotifyPropertyChanged.

private void AddCollectionListener() 
    { 
     if (MyCollection != null) 
     { 
      MyCollection.CollectionChanged += 
       new System.Collections.Specialized.NotifyCollectionChangedEventHandler(MyCollection_CollectionChanged); 
     } 
    } 

    void MyCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e) 
    { 
     // Remove Listeners to each item that has been removed 
     foreach (object oldItem in e.OldItems) 
     { 
      ViewModel viewModel = oldItem as ViewModel; 

      if (viewModel != null) 
      { 
       viewModel.PropertyChanged -= viewModel_PropertyChanged; 
      } 
     } 

     // Add Listeners to each item that has been added 
     foreach (object newItem in e.NewItems) 
     { 
      ViewModel viewModel = newItem as ViewModel; 

      if (viewModel != null) 
      { 
       viewModel.PropertyChanged += new PropertyChangedEventHandler(viewModel_PropertyChanged); 
      } 
     } 
    } 

    void viewModel_PropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     // TODO: Property Changed Logic 

     switch (e.PropertyName) 
     { 
      case "MyPropertyName": 
       // TODO: Perform logic necessary when MyPropertyName changes 
       break; 
      default: 
       // TODO: Perform logic for all other property changes. 
       break; 
     } 
    } 
+0

Я отредактировал код, чтобы показать, как я обрабатываю данные. Возможно ли узнать обновления объектов, а не добавлять и удалять объекты. – developer

+1

Обработчик viewModel_PropertyChanged будет вызываться в любое время, когда свойство изменений ViewModel (любое свойство, которое вызывает событие PropertyChanged). Как правило, вы добавляете оператор switch, который включает e.PropertyName. Я обновил код, чтобы показать пример, где MyPropertyName является свойством, которое существует в одной или нескольких ViewModels. –

+0

Спасибо, что так много .. – developer