我有一個用MVVM的實現編寫的WPF應用程序。 MVVM模式沒有額外的框架。EF類實體應保存在哪個類中?
來自EF db的實體首先被包裝在它們自己的視圖模型中,並且我有一個modelcontroller將它們從「窗口」視圖模型加載到它們的視圖模型中。實體視圖模型的
例子:
public class MainViewModel: ViewModels.ViewModelBase
{
private IModelController modelController = new ModelController();
private List<PurchaseOrderViewModel> _poList;
public List<PurchaseOrderViewModel> POList
{
get
{
return _poList;
}
set
{
_poList = value;
OnPropertyChanged();
}
}
// ...
// Other Properties
// ...
public MainViewModel()
{
POList = modelController.GetPurchaseOrders();
}
}
ModelController的例子:
public class ModelController : IModelController
{
public List<PurchaseOrderViewModel> GetPurchaseOrders()
{
using (var model = new DBContext())
{
return model.purchaseorders
.Select(new PurchaseOrderViewModel { /* assign properties */ })
.ToList();
}
}
}
我應該在哪裏保存該包裹的視圖模型的窗口視圖模型的
public class PurchaseOrderViewModel : ViewModels.ViewModelBase
{
private someType _prop;
public someType Prop
{
get
{
return _prop;
}
set
{
_prop = value;
OnPropertyChanged();
}
}
// ...
// Other Properties
// ...
public PurchaseOrderViewModel() {
// default constructor for LINQ
}
public PurchaseOrderViewModel(purchaseorder entity)
{
// load values from entity in properties
}
}
例(PurchaseOrderViewModel)一旦用戶完成編輯?正如我所看到的,有兩種選擇:
- 在每個viewmodel中創建一個保存函數,該函數指向modelController,但這種感覺像是一種不恰當的方法。
- 創建於modelcontroller保存功能,並通過視圖模型作爲參數
這很可能是我失蹤的MVVM模式的東西,但請點我在正確的方向。謝謝!
編輯:我從所提供的信息中排除了視圖(MainView),但該視圖直接綁定到由MainViewModel公開的屬性。
選項1最接近,不合適。但是你並沒有充分使用MVVM。您應該將虛擬機建立在視圖(用例)上,而不是模型上。 –
如果我正確理解你在說什麼,那麼我想我已經這樣做了。我的MainView直接綁定到MainViewModel的屬性。我沒有包含這些信息,因爲我認爲這與問題無關。 – MichelMichels
不,我的意思是ViewModels不應該太緊密地遵循Models類。他們的名字應該來自你設計的屏幕。 –