我的模型由單個主對象組成,用戶也可以添加其他各種對象。添加的對象存儲在主對象中包含的List<object>
中,並且它是關聯的子對象。將數據傳遞到數據層
所以如果該項目是一個房子。用戶可以將一些Room
對象添加到存儲在List<Room> RoomList
中的房屋中。然後每個Room
可以有多個Furnishings
再次添加存儲在每個房間List<Furnishing> FurnishingsList
問題是如何在MVVM方法中實現這個?當用戶添加一個新對象時,我是否將它添加到ViewModel中的ObservableCollection
,以便更新視圖並同時將其添加到掛鉤到VM中的模型中?或者我將它存儲在虛擬機中,直到保存或提交命令,然後將它傳遞給模型?
在我的例子中,我有各種編輯器(每個都是用戶控件)。因此,用戶可以使用一個編輯器在高層編輯房屋,從房屋中添加,編輯和移除房間。而在較低的層面上,使用不同的編輯器編輯每個房間,添加和刪除Furnishings
。
所以當用戶'編輯'一個房間說。我生產的EditRoomModelView
包含說Room
。用戶添加,編輯和以其他方式操縱該房間中的傢俱。
在每個命令中最好是同步模型中的數據和ModelViee中的數據。或者,我會將這些更改直接推入模型中,並使ViewModel僅在注入的模型屬性中提供獲取者。但是,這種方式將對象添加到模型列表不會更新視圖。我真的不得不同時將數據添加到ModelView和Model中,因此所有內容都處於相同狀態。
漫不經心,努力尋找一個很好的方法,任何人都明白我在做什麼?
謝謝Erik,當我將新對象成功傳遞到域圖層並將其存儲在'List
即使知道ObservableCollection是什麼(即沒有引用包含它的WPF程序集),我在表示層下面也沒有任何東西。我通常會通知GUI組件的方式是使用事件或回調。舉一個簡單的例子,考慮兩個引用相同服務實例的虛擬機。虛擬機A告訴服務添加一個房間,並且該服務完成添加房間所需的任何魔法。當它完成併成功時,會引發VM B偵聽的事件。當事件發生時,VM B重新查詢所有房間的服務...... – 2012-01-06 18:31:00
在實際實施中,域本身將處理添加,然後引發一個事件,服務將消耗並轉發給VM。但是這裏的想法是這樣的 - 虛擬機只知道如何向服務請求對象(POCO/DTO)以及如何將它們傳遞給更新等操作。所以,服務和虛擬機之間的關係是虛擬機會請求對象(Get/GetAll)和請求操作(Add,Edit等)。虛擬機還會監聽服務事件,稱之爲「OnDirty」,告訴虛擬機何時可能與域不同步。虛擬機然後有重新查詢的負擔。 – 2012-01-06 18:33:53