2010-09-22 202 views
2

我仍然在學習使用MVVM和棱鏡,並有一些普遍問題:WPF,MVVM和棱鏡模塊化

  • 我有我的觀點的網格。可以說我 有一個按鈕,當我點擊我 希望它自動調整網格 列的大小。代碼在哪裏? 調整網格列的大小是一個視圖事物 和視圖模型不應該知道關於它的 。那麼在這種情況下我會是 在 後面添加按鈕點擊處理程序後面的代碼?我有 與網格編輯相同的問題和 驗證。如果使用雙向 綁定編輯值,但如果它確定 值無效,那麼視圖模型可以看到 ,如何通知 網格取消編輯?

  • 比方說我認爲有許多用戶 控制並且每個用戶控制需要 從一個不同的對象綁定到的數據。我的這個視圖的視圖模型是否僅僅是一個龐大的類,其中包含了視圖中所有不同組件所需的所有數據?

  • 關於棱鏡和模塊化設計,我 正試圖找出什麼 「模塊」是。我的理解是 ,一個模塊是自包含的, 意思是如果我拿起我的模塊,並且 放在另一個應用程序中,它應該 工作。所以,如果我有一個類 ,使得一些服務電話(讓 說SOAP調用服務器得到一些 信息),並填充一個網格,我的模塊 需要既包括MVVM 組件和我的服務層, 權?如果我有多個使用相同服務層的模塊 ,那麼每個模塊是否需要包含服務層類 的副本以便被視爲完整的 模塊?

感謝您的任何建議/信息。

回答

3

我會嘗試單獨檢查這些項目。

  1. 正如你所說,調整網格列的大小更多的是視圖的東西,所以保持作爲UI邏輯的一部分可能是最好的。爲了儘可能保持代碼儘可能乾淨,您可以使用不同的東西,例如behaviors以及某些場景中的路由命令,以避免讓代碼隱藏在代碼中。至於驗證邏輯,您應該將其放入VM/M中,並使用WPF的驗證功能(如IDataErrorInfo等)。
  2. 您可以針對所有用戶控件擁有單一視圖模型,或採用層級視圖模型方法。 latest Prism drop在MVVM RI中顯示了這種情況。
  3. 您對模塊的理解是準確的。需要考慮的一件事是,如果您爲整個應用程序提供通用服務,通常的方法是將其接口放置在基礎結構項目中,並在需要時引用它(具體實現通常通過DI或Mef導入獲得)。具體實現所屬的模塊可以根據需要選擇在容器中註冊服務/顯示導出。This thread有關於模塊的更多信息,它們是什麼以及它們應該如何使用。

如果您開始接觸棱鏡並有任何其他問題,您可能會發現codeplex forum有用,因爲或許您的問題已由Prism SE團隊回答。

我希望這個答案有幫助。

謝謝, 達米安

+0

謝謝達米安。真的很有幫助。 – Flack 2010-09-23 17:32:19