2012-09-06 98 views
0

好的,所以我正在使用MVVMC(或MVCVM)模式在WPF中使用Microsoft Prism。我應該依賴注入嗎?我該怎麼做?

在我的ChatModule中,我有一系列Views,ViewModels和一個Controller。

對於瀏覽我

  • ChatAreaView - 顯示進來要讀取的聊天消息。這是託管在一個TabControl區域內,以便我可以在用戶和其他用戶之間有聊天窗口,或者可能是文件傳輸窗口等。
  • UserAreaView - 這是一個用戶列表。右鍵單擊上下文菜單可與它們進行交互......例如發送文件或竊竊私語。
  • MessageAreaView - 這是用戶輸入消息的地方,可以發送給所有其他消息。

對於每個視圖,我有一個相應的ViewModel。 ChatAreaViewModel,UserAreaViewModel和MessageAreaViewModel。這些ViewModel本質上只包含屬性。

例如,UserAreaViewModel定義了一個User類型的結構,它基本上只是一個Name。實際上,這是在班級以外定義的,但仍然是......它使用它。它有一個ObservableCollection來存儲當前連接的所有用戶的列表。它還具有定義用於與用戶交互的ICommand屬性。現在我有SendFile,Whisper和Nudge ......意圖在未來增加更多。

控制器創建這些視圖和ViewModels,並結合它們。它將它們發佈出來,將ViewModel分配爲相應的View的DataContext,並設置ViewModel的所有初始屬性。在模塊的整個生命週期中,它將對用戶交互做出反應並執行已分配給每個ViewModel的ICommand屬性的DelegateCommands。這些將進一步改變ViewModel中的屬性狀態。

我正在使用視圖和ViewModels的實際類型,而不是像這樣的接口。

#region Views 

ChatAreaView viewChatArea; 
UserListView viewUserArea; 
MessageView viewMessageArea; 
LoginPromptView viewLoginPrompt; 

#endregion 

#region ViewModels 

ChatAreaViewModel viewModelChatArea; 
UserAreaViewModel viewModelUserArea; 
MessageAreaViewModel viewModelMessageArea; 
LoginPromptViewModel viewModelLoginPrompt; 

#endregion 

將東西被很多更整齊,更小,如果我定義的視圖和的ViewModels接口耦合,並且在控制器而不是具體的實現中這些接口操作?那麼我可以在模塊類(它實質上是每個模塊的根)中註冊它們嗎?

這樣做有什麼好處?我將如何實現每個視圖的界面以區別於其他視圖?除了擁有XAML之外,他們不會做任何事......而且ViewModel除了具有某些屬性外,其他任何東西都不會真正做任何事情。而這些屬性可能會發生變化。例如在UserAreaViewModel上,我一定會添加更多的命令,以便用戶以不同的方式與另一個用戶進行交互。

有人可以幫我嗎?在我看來,我認爲我應該抽象這些東西,但我並不真正瞭解我應該怎麼做,或者即使這樣做是一個明智的想法。我必須得到什麼?

謝謝你的時間。下面的圖片是我正在工作的一個例子。忽略Add new Item按鈕和所有東西的樣式......這不是我現在正在處理的東西。

Chat Application

回答

0
  1. 鬆散耦合 - 可以在未來的完全不同的實施更換整個類。
  2. 獨立開發..可以注入一個虛擬的用戶界面/視圖,直到最終的用戶界面準備就緒。兩件可以同時進化(在擁有共同合同之後)。
  3. 無需添加對模塊的引用(實現視圖)。可以使用ConfigurationModuleCatalog從配置文件中發現類型。