将模型绑定到 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 中的模型实例。
在 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 中的模型实例。