相关疑难解决方法(0)

模型更改时刷新ViewModel的所有属性的数据绑定的好方法

精简版

如果我更新了我的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的属性. …

data-binding wpf mvvm inotifypropertychanged

30
推荐指数
2
解决办法
3万
查看次数

标签 统计

data-binding ×1

inotifypropertychanged ×1

mvvm ×1

wpf ×1