2012-05-13 62 views
5

您好,我正在學習MVVM,並且我對某些部分不太確定,主要是(數據)模型需要與VM(ViewModel)進行通信的部分。MVVM中的數據庫模型

所以我得到了一個班的人,它有很多屬性(使用Raiseproperty(INotifyPropertyChanged))。現在我怎樣才能將該類連接到虛擬機我將創建一個新類並將其稱爲ViewModelPerson,但我主要想要一個人員列表,因爲只顯示1個人有點沒用,該列表將從數據庫中收集(SQLite )與Dapper。現在,我需要在視圖模型還是(數據)模型中創建可觀察列表?我認爲在ViewModel中,因爲我需要將它綁定到視圖,但是我從哪裏插入數據庫信息到ViewModel ObservableCollection中?我是否將它放在像ViewModelPersonsList構造函數這樣的構造函數中,該構造函數具有一個查詢來收集SQlite DB中的所有人並將其插入列表中?

希望你明白我無法理解MVVM模型的地方,如果有什麼不清楚的地方,請隨便問一下,我會試着更好地解釋我的問題。

馬克西姆

+0

我的回答對你有幫助嗎? –

回答

1

查看 - >視圖模式 - >業務邏輯 - >數據層 - > DB

OR

查看 - >視圖模式 - > WCF/Web服務 - >業務邏輯 - >數據層 - > DB

如果您的視圖模型需要Person對象的名單,那麼它應該調用你的業務邏輯層,你的BLL將實現圍繞調用數據層必要的邏輯。您的BLL返回列表,並且您的VM通過綁定使其可用於視圖。

更新 Person對象的工作方式相同。 VM只是用更新的對象調用BLL。

1

因爲我看到你提到Sqlite,我假設你正在談論小型WPF項目。

我建議你做一個實體框架代碼優先模型映射到您的數據庫(讀this)。

如果你想使用SQL Server Compact Edition,你甚至可以擁有數據庫generated for you(當然,這也可以通過Sqlite來實現,但需要付出更多努力)。

無論如何,你然後使用所產生的(或編碼的)DbContext作爲UoW對象。

您可以選擇分別通過DAL或直接從ViewModel處理數據。

任何情況下,我會說,創建兩個視圖模型基類,一個是暴露了一個TEntity,並暴露TEntity集合其他。 如果您選擇在虛擬機中執行DAL操作,則可以將CRUD方法添加到您的基本CollectionViewModel中,然後手動調用或讓用戶通過暴露命令來調用它。