【发布时间】:2015-08-24 14:11:50
【问题描述】:
我还没有找到确切的答案。有些人提到直接绑定到模型不适合 MVVM,但是我正在尝试确定以下模式是否仍然遵循 MVVM:
查看:
<TextBox Text="{Binding InfoForProcessing.BatchId}"/>
<TextBox Text="{Binding InfoForProcessing.BatchStatus}"/>
视图模型:
private ProcessingTaskModel _infoForProcessing;
public ProcessingTaskModel InfoForProcessing
{
get
{
return _infoForProcessing;
}
private set
{
_infoForProcessing = value;
RaisePropertyChanged();
}
}
....
//doing some processing...then tell Model to populate the data:
InfoForProcessing.ResolveBatchInfo(...);
模型:(实现 INotifyPropertyChanged)
private string _batchId;
public string BatchId //VIEWABLE
{
get
{
return _batchId;
}
private set
{
_batchId = value;
RaisePropertyChanged();
}
}
private string _batchStatus;
public string BatchStatus //VIEWABLE
{
get
{
return _batchStatus;
}
private set
{
_batchStatus = value;
RaisePropertyChanged();
}
}
public bool ResolveBatchInfo(...){
//Get data from Database...
...
//Now Populate Properties with retrieved data (or return false on error)
BatchId = dr[0].ToString();
BatchStatus = dr[1].ToString();
return true;
}
我看到了另一种方法。我可以将这些属性复制到 ViewModel,绑定到它们,并在 Model 返回时让 ViewModel 填充它们。
对于我这里的当前项目,模型中的一些数据是稍后将执行的查询的依赖项
我也确保尽可能地封装,只公开 View 和 ViewModel 需要看到的属性,同时限制 setter。
【问题讨论】:
-
我认为任何一种方式都可以。 MVVM 是一种模式,而不是硬性规则。我会以对您有意义的方式实现它。
-
有人提到直接绑定模型不适合MVVM有些人不聪明。