2011-04-19 19 views
1

我有一個窗體顯示在視圖模型中的ObservableCollection中的對象的數據。 ObservableCollection讓我翻閱數據。在哪裏放置/添加新實體,是否應該放入新的ViewModel?

ObservableCollection中的對象類型爲ItemTypeViewModel。這是一個封裝類,包裝實體ItemTypeItemType本身來自Linq2SQL(沒有域類,應用程序的基礎已經建成))。

現在,我需要能夠創建新的ItemTypes。我想用這個表單來做到這一點。我有一個New按鈕,它將在View的ViewModel中啓動一個命令,該命令將它委託給同一ViewModel中的一個方法(可能類似於CreateNewItemType()。此方法將需要創建一個新的ItemType,但這裏是我的位置困境是,我的大多數例子中看到使用域類來創建一個新的實例,例如

Customer customer = Customer.CreateNewCustomer();

但因爲我沒有任何領域類,我不能做到這一點。這感覺怪怪的把它在視圖的ViewModel中,以及將它放入包裝實體的ViewModel中。

這裏採取什麼好方法?

回答

0

我可以在這裏找到基地,但它聽起來像你有一個控制器,提供ObservableCollection<ItemType>

這聽起來像在同一頁面(或類似頁面)上,您希望能夠通過表單元素接受用戶輸入,並將這些元素統一用於填充ItemType的新實例。

如果是這種情況,表單的發佈操作應該提交給Controller,並且控制器應該能夠以傳入參數的形式訪問單個表單元素作爲其適當的數據類型進行投射,或者如果您正在使用強大的你應該能夠隱式地將所有的表單參數直接轉換回ItemType的實例,只需改變控制器方法的簽名以接受類型爲ItemType的參數即可。

這是所有,當然,假設你在Asp.Net MVC框架內工作,不是嗎?

+0

我認爲他正在使用WPF + MVVM – 2011-04-19 20:46:16

+0

啊,如果是這樣的話,我會考慮使用模式和實踐團隊中的Prism。這是一個鏈接:http://compositewpf.codeplex.com/。此外,MVP和區域總監Brian Noyes與該團隊合作開展了Prism項目,並將成爲一個極好的資源。 – fdfrye 2011-04-19 20:49:36

+0

是的,它是MVVM和WPF。我會確定。閱讀棱鏡,但問題是,這一切都在我的手中(棱鏡明智),因爲我只是一個能夠在模塊上工作的人。 – DerMeister 2011-04-19 21:10:01

0

我嘗試回覆,但我不太確定它是否如此: 我將在viewmodel集合更改事件中自我保護。當用戶添加新項目或刪除一個時,我將在兩個單獨的集合中收集添加/刪除項目。然後,在提交階段,我將從新項目集合中的數據中創建新的ItemType實例,並將這些記錄提交給數據庫,並執行刪除操作。如果你需要檢查修改到單行...

+0

謝謝你的回覆。我已經制定了如何解決這個問題(添加/刪除),但我不知道應該在哪裏創建和返回新的(空的)ItemType。 – DerMeister 2011-04-19 21:13:11