Короткая версия
Если я обновлю объект Model, который оборачивает мой ViewModel, каков хороший способ запуска уведомлений об изменении свойств для всех свойств модели, которые предоставляет мой ViewModel?
Подробная версия
Я разрабатываю клиент WPF по шаблону MVVM и пытаюсь обрабатывать входящие обновления из службы в данные, отображаемые в моих представлениях.Когда клиент получает обновление, оно появляется в форме DTO, который я использую в качестве модели.
Если эта модель является обновлением существующей модели, отображаемой в представлении, я хочу, чтобы связанный ViewModel обновил свои свойства привязки к базе данных, чтобы представление отражало изменения.
Позвольте мне проиллюстрировать это примером. Рассмотрим мою модель:
class FooModel
{
public int FooModelProperty { get; set; }
}
Обернуто в ViewModel:
class FooViewModel
{
private FooModel _model;
public FooModel Model
{
get { return _model; }
set
{
_model = value;
OnPropertyChanged("Model");
}
}
public int FooViewModelProperty
{
get { return Model.FooModelProperty; }
set
{
Model.FooModelProperty = value;
OnPropertyChanged("FooViewModelProperty");
}
}
Проблема:
Когда прибывает обновленная модель, я устанавливаю свойство Model в ViewModel, например:
instanceOfFooVM.Model = newModel;
Это вызывает OnPropertyChanged("Model")
, но не OnPropertyChanged("FooViewModelProperty")
, если я не вызываю последнюю явно изModel
сеттер.Таким образом, представление, привязанное к FooViewModelProperty
, не будет обновляться для отображения нового значения этого свойства при изменении модели.
Явный вызов OnPropertyChanged
для каждого открытого свойства модели, очевидно, не является желательным решением, и ни одно из них не являетсяберём newModel
и перебираем его свойства, чтобы обновить свойства ViewModel по одному.
Как лучше подойти к этой проблеме обновления всей модели и необходимости запускать уведомления об изменениях для всех ее открытых свойств?