简短版本
如果我更新 ViewModel 包装的 Model 对象,有什么好的方法可以为 ViewModel 公开的所有模型属性触发属性更改通知?
详细版本
我正在开发一个遵循 MVVM 模式的 WPF 客户端,并尝试处理从服务接收到的用于显示数据的更新。当客户端接收到更新时,更新以 DTO 的形式出现,我将其用作 Model。
如果此模型是要更新现有视图中显示的模型,则希望相关联的 ViewModel 更新其数据绑定属性,以便视图反映更改。
举个例子说明。 考虑我的 Model:
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");
}
}
问题:
当一个更新的模型到达时,我会这样设置 ViewModel 的 Model 属性:
instanceOfFooVM.Model = newModel;
这会导致OnPropertyChanged("Model")
被触发,但不会自动触发OnPropertyChanged("FooViewModelProperty")
,除非我在Model
的setter中显式地调用后者。因此,绑定到FooViewModelProperty
的视图在更改Model并更新其属性时不会显示该属性的新值。
显式地为每个公开的Model属性调用OnPropertyChanged
显然不是一个理想的解决方案,也不是获取newModel
并逐个更新ViewModel属性的最佳方案。
针对这个需要更新整个模型并且需要触发所有已公开属性的变化通知的问题,有哪些更好的解决方案?
null
作为propertyName
的值,但并没有更新所有绑定类的属性。然而,使用string.Empty
作为propertyName
的值确实可以更新所有绑定类的属性。 - Eido95null
不起作用。应该使用""
或者string.Empty
。 - StayOnTarget