如果我更新了我的ViewModel包装的Model对象,那么触发我的ViewModel公开的所有模型属性的属性更改通知的好方法是什么?
我正在开发遵循MVVM模式的WPF客户端,并且我正在尝试处理从服务到我的视图中显示的数据的传入更新.当客户端收到更新时,更新以DTO的形式出现,我将其用作模型.
如果此模型是对View中显示的现有模型的更新,我希望关联的ViewModel更新其数据绑定属性,以便View反映更改.
让我举一个例子来说明.考虑我的模型:
class FooModel
{
public int FooModelProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
包含在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");
}
}
Run Code Online (Sandbox Code Playgroud)
问题:
当更新的模型到达时,我设置了ViewModel的Model属性,如下所示:
instanceOfFooVM.Model = newModel;
Run Code Online (Sandbox Code Playgroud)
这会导致OnPropertyChanged("Model")触发,但不是OnPropertyChanged("FooViewModelProperty"),除非我明确地从后者Model设置后者.因此FooViewModelProperty,当我更改模型时,绑定的视图将不会更新以显示该属性的新值.
明确地调用OnPropertyChanged每个公开的Model属性显然不是一个理想的解决方案,也没有采用newModel并迭代其属性来逐个更新ViewModel的属性. …