2013-04-05 90 views
0

我繼承它使用視圖-第一MVVMC百通重用WPF MVVM視圖

在我創建2步驟方法,該方法產生了一個人,它們分配給一個組的應用程序的應用程序。爲此,我創建了一個視圖和相應的視圖模型(所有視圖與視圖模型都有1-2-1的關係,視圖模型注入到View構造函數中,並使用TransientLifetimeManager在Unity容器中註冊),稱爲CreatePersonMaster ,該視圖僅包含一個區域(由虛線表示),哪些子視圖可以加載到視圖模型中並且訂閱兩個鬆散耦合的事件「PersonCreated」和「GroupSelected」。 「PersonCreated」事件將Person實體保存在一個字段中,並且「GroupSelected」事件將保存的Person,創建一個Group關聯並將其保存到數據庫中。

此視圖/視圖模型在事件發生之前不會執行任何操作,因此我將以下子視圖加載到我的區域中。

Create Person Views

這些視圖/視圖模型大火得到由主視圖處理的事件。

我也有一個編輯視圖,我想重新使用選擇組視圖。

Edit Person Views

我可以通過訂閱的EditPersonMaster視圖模型相應的事件做到這一點。

我的問題確實是,這是做到這一點的適當方式?因爲我使用鬆散耦合的事件,如果在創建/重新分配時發生錯誤,我不會收到子視圖/視圖模型的任何反饋?我可能會爲內部視圖/模型啓動另一個「ErrorBlah」事件來處理和更新視圖。

是否有另一種方法可以做到這一點?複合命令似乎不適合賬單,但也許我不正確地理解它們。

回答

0

下面是我如何理解你的問題:你有人存儲在一個數據庫,其中有一個屬性/列group。在你的用戶界面中,你想創建人員並分配組屬性。另外,您希望能夠編輯不同地區/頁面/主頁中現有人員的組屬性。您想要重新使用控件來分配組。你的控件觸發一個事件,這是由主人處理的一種方式,它創建數據庫中的條目(是否正確?)。你的問題是這是否是一個好方法,你有什麼替代方案?

我看到兩個選項:

1.組件化的業務邏輯:

你可以注入數據服務到您的ViewModels,這可能直接訪問數據庫。這樣你就可以直接處理錯誤等等,而不必將它們傳遞給整個系統。如果您想通知其他模塊數據庫上的更改(指定更改的數據集等),則可以使用複合事件來完成此操作。我認爲PRISM模塊更像完整的元素,包括UI和業務邏輯,並儘可能少地保持它們之間的通信。

2。保持您的業務邏輯核心並共享它:

如果您想堅持您的架構,請將Singleton Model注入到ViewModels中。在模型中管理你的狀態並讓ViewModel選擇他們想要提供給他們視圖的作品。

希望我得到了他的意見,雖然...