将模型绑定到 ViewModel 的方法

Method to bind Model to ViewModel

ReactiveUI 中,如果我在 ViewModel (ReactiveObject) 后面有一个模型 (INotifyPropertyChanged),最佳做法是什么?我是否在 属性 的 getter 和 setter 中使用模型:

private Model model;
public string Minky
{
    get { return model.Minky; }
    set 
    { 
      model.Minky = value;
      this.PropertyChanged();
    }
}

或者我应该绑定个别属性:

private string minky;
public string Minky
{
    get { return minky; }
    set { this.RaiseAndSetIfChanged(ref minky, value); }
}

public ViewModel( Model model ) 
{
  if ( model != null ) 
  {
    model.WhenAnyValue( x => x.Minky ).BindTo( this, x => x.Minky );
  }
}

第二个版本似乎是个好主意(没有模型时我仍然可以设置属性)。为什么这是个坏主意?

在任何 MVVM 绑定模式中,最佳做法是将 "View" 绑定到 "ViewModel",此处不使用任何模型。当然,模型随后用于数据访问和业务层,以执行诸如在数据库中记录或传递给 Web 服务但不用于绑定的操作。

如果您想出于绑定原因使用封装模型,您应该将模型作为具有自己的 PropertyChanged 通知程序的可绑定对象,然后绑定到它们。像这样:

您的 ViewModel

中有一个 Model
private Model model;
public Model Model
{
    get { return model; }
    set 
    { 
      model = value;
      this.PropertyChanged();
    }
}

然后绑定到属性

this.Bind(ViewModel, x => x.Name, x => x.Model.Minky);

总结一下:这是个坏主意。但是如果你想这样做,它会直接绑定到你的 ViewMdel 中的模型实例。