我一直在開發一個非常大的LOB應用程序,使用我稱之爲M-V-MC(Model-View-ModelController)的M-V-VM的味道,這是M-V-C和M-V-VM之間的一種組合。我發佈了this answer關於視圖如何在M-V-VM中實例化到「what-are-the-most-common-mistakes-made-in-wpf-development」這個問題。M-V-VM - 在ViewModel中使用命令的任何示例?
Sam作了如下評論關於我的回答:
這將創建一個跟進-問題: 你如何創建視圖?我使用 RelayCommands綁定動作從 視圖到ViewModel,所以視圖 甚至不知道一個動作有 解僱,不知道他應該打開一個 新視圖。解決方案:在 中爲View創建一個事件來訂閱?
當我最初開始M-V-VM發展我有這個想法,一切都應該生活在視圖模型,並研究了大量的例子,從男人喜歡Josh Smith和Karl Shifflett。然而,我還沒有想出一個很好的例子,當一個命令需要在ViewModel中生存時。
例如,假設我有一個顯示客戶的ListView和一個單擊的按鈕,以允許我編輯當前選定的客戶。 ListView(View)綁定到CustomerVM(ViewModel)。單擊該按鈕將觸發EditCustomerCommand,它將打開一個彈出窗口,該窗口允許我編輯CustomerVM的所有屬性。這個EditCustomerCommand在哪裏居住?如果涉及到打開一個窗口(UI功能),不應該在視圖的代碼隱藏中定義它嗎?
有沒有人有任何例子,當我應該在視圖與ViewModel中定義一個命令?下面
新的和刪除列表中會 很好的例子。在這些情況下,將添加一個空白 記錄或ViewModel刪除當前記錄 。任何 視圖採取的行動應該在 響應這些事件發生。
所以,如果我點擊新按鈕,會發生什麼? CustomerVM的一個新實例由Parent ViewModel創建並添加到它的收集權限中?那麼我的編輯屏幕如何打開?該視圖應該創建Customer ViewModel的新實例,並將它傳遞給ParentVM.Add(newCreatedVM)方法嗎?
比方說,我通過生活在虛擬機上的DeleteCommand刪除客戶記錄。 VM調用業務層並嘗試刪除記錄。它不能這樣,它會向VM返回一條消息。我想在對話框中顯示此消息。視圖如何從命令操作中獲取消息?
所以,如果我點擊新按鈕,會發生什麼?該視圖應該創建一個ViewModel的新實例,並將它傳遞給CurrentVM.Add(newCreatedVM),但對嗎? – Micah 2009-01-08 17:16:40
假設我通過VM上的DeleteCommand刪除客戶記錄。 VM調用業務層並嘗試刪除記錄。它不能這樣,它會向VM返回一條消息。我想在對話框中顯示此消息。視圖如何從命令操作中獲取消息? – Micah 2009-01-08 17:30:40