У меня есть наблюдаемая коллекция объектов viewmodel. Как я могу подписаться на событие Property Changed для каждой модели представления в моей коллекции по мере их создания и отслеживать, какие из них были изменены, чтобы я мог обновить их в моей базе данных.Событие PropertyChanged ViewModel в ObservableCollection
0
A
ответ
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;
}
}
Я отредактировал код, чтобы показать, как я обрабатываю данные. Возможно ли узнать обновления объектов, а не добавлять и удалять объекты. – developer
Обработчик viewModel_PropertyChanged будет вызываться в любое время, когда свойство изменений ViewModel (любое свойство, которое вызывает событие PropertyChanged). Как правило, вы добавляете оператор switch, который включает e.PropertyName. Я обновил код, чтобы показать пример, где MyPropertyName является свойством, которое существует в одной или нескольких ViewModels. –
Спасибо, что так много .. – developer