Не создавайте коллекцию объектов модели и не реализуйте свойства IntType
и Description
в вашей (текущей) модели представления. И если у вас нет какой-либо другой причины для этого, не применяйте уведомление об изменении свойства в вашей модели.
Вместо этого сделайте IntTypes
коллекцией InterestTypeEntityViewModel
объектов.
Этот класс охватывает InterestTypeEntity
. Он предоставляет свойства IntType
и Description
, которые а) обертывают базовые свойства InterestTypeEntity
и б) выполняют уведомление об изменении свойства. Если вы заставите его конструктор принять аргумент InterestTypeEntity
, его легко заполнить в вашей модели представления:
IntTypes = new ObservableCollection<InterestTypeEntityViewModel>(
DataRepository.InterestTypeEntities.Select(x => new InterestTypeEntityViewModel(x));
Свяжите ItemsSource
с этой коллекцией. (Также, сделайте CurrentIntType
свойством типа InterestTypeEntityViewModel
и увеличьте PropertyChanged
, когда оно изменится.)
Изменить:
Если модель представления-владельца должна уведомляться при изменении свойств элементов в ее коллекции, довольно просто заставить ее обрабатывать PropertyChanged
события, которые они вызывают. В вашем конструкторе добавьте:
foreach (InterestTypeEntityViewModel vm in IntTypes)
{
vm.PropertyChanged += InterestTypeEntityViewModel_PropertyChanged;
}
и этот метод:
private void InterestTypeEntityViewModel_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
InterestTypeEntityViewModel vm = (InterestTypeEntityViewModel) sender;
// check e.PropertyName and do whatever you need to do here.
}
Не забудьте отменить регистрацию обработчика событий, если вы удалите объект из вашей коллекции; в противном случае объекты модели дочернего представления не будут расположены до тех пор, пока не будет выполнен родительский объект.
Кстати, обратите внимание, что, реализовав таким образом модели представлений, вы можете в значительной степени контролировать свои обновления базовой модели сущностей. Например, вы можете реализовать команду в своей родительской модели представления, которая выполняет все обновления за одну операцию, и еще одну, которая позволяет пользователю отменить все изменения, сделанные в пользовательском интерфейсе, без выполнения обновления. И вся эта логика очень хорошо отделена от фактического уровня представления.