2009-11-22 77 views
3

我一直在通過Josh Smith的關於MVVM的文章http://msdn.microsoft.com/en-us/magazine/dd419663.aspx。每個部分都對我有意義,但我很難將其作爲一個整體融合在一起。我有兩個問題會幫助一噸。關於Josh Smith的示例應用程序的MVVM問題

  1. 如果我要構建樣本ap,那麼構建它的邏輯順序是什麼?

  2. 對於命令結構,會發生什麼,按什麼順序運行ap?

我也想知道我是否應該把它分成2個問題?

+0

你能澄清關於命令的問題嗎?這是一個好奇的問題,還是你有問題? – Mathias 2009-11-22 19:05:41

+0

我想我正在尋找的是當程序被執行來設置命令時會發生什麼,當一個視圖被實例化來註冊它的命令時會發生什麼,當點擊一個按鈕來執行正確的命令時會發生什麼。我認爲給我提出問題的部分與命令系統知道單擊按鈕時要執行什麼有關。如果2個窗口有一個保存命令,它如何知道要執行哪個? – 2009-11-22 23:33:07

回答

3
  1. 我Yacoder同意這一個。從你所知道的或你的願景開始。如果您的願景是獲得特定的用戶體驗,請從Expression Blend開始,如果您願意。如果您知道您想要的功能,請從ViewModels和Unit測試開始。

  2. Smith的應用程序以App.xaml.cs開頭。 那裏創建並顯示MainWindowViewModel和MainWIndow。

MainWindow.xaml是接下來發生的事情。它定義了UI的主要部分。這個主要部分顯示了兩個集合;命令和工作區。這些是MainWindowViewModel的成員。

Smith似乎喜歡屬性來檢查它們相應的私有字段是否爲空,如果它們是,則分配它們。因此,「Commands」集合在MainWindowViewModel的第51行中創建,該行調用CreateCommands()的正下方。

命令類被RelayCommand抽象掉,可能是因爲在「Show All」或「Create」的情況下,每個命令不需要知道太多。這兩個命令的方法在MainWindowViewModel中,因爲它們在概念上是主窗口的功能。

Commands集合在主窗口中顯示爲一個列表,因此它們需要某種可呈現的,用戶友好的文本來描述它們。因此它們被封裝在自己的CommandViewModels中。

這些命令通過從MainWindow.xaml的第41行開始的XAML的魔術來呈現。 HeaderedContentControl綁定到Commands集合,並指定MainWindowResources.xaml的CommandsTemplate(從該文件的第93行開始)。該模板使用HyperLink並將其Command屬性綁定到CommandViewModel的Command屬性。

說到新客戶表單上的保存按鈕。這是從CustomerView.xaml的第117行綁定的。到第196行的CustomerViewModel SaveCommand屬性。它是一個指向CustomerViewModel中的方法的RelayCommand。每個客戶視圖都有自己的CustomerViewModel實例,該客戶的數據在該實例中進行。 RelayCommand的實例屬於這些CustomerViewModel,所以每個視圖都有它自己的SaveCommand。 RelayCommand實例的動作和謂詞不僅知道它們指向哪些方法和屬性,還知道哪些實例。 CustomerViewModel的Save方法僅使用來自該實例的數據。

這就是兩個視圖大概如何具有相同類型的按鈕,以便爲其各自的客戶數據執行相同的操作。

+0

我現在看到命令給我帶來麻煩的地方,我在想,只是一箇中繼命令的實例,這是我遇到麻煩的地方,我有過多年的「線性」編程,舊的思維模式對我來說很難。 – 2009-11-24 04:46:49

+0

感謝您的接受。 WPF對我來說也很難,它打破了20年的UI編碼。向其他人解釋這一點有助於我將它放在腦海中,感謝給我這個機會。 – Guge 2009-11-24 06:46:31

2
  1. 從更好的部分開始。用戶界面或模型。無論如何,您必須對整個MVVM進行幾次迭代,才能使所有部件合在一起。
  2. 你的第二個問題對我來說並不完全清楚,我會說沒有命令是由應用程序運行的事實啓動的,某些操作(如按鈕單擊)會觸發命令執行其操作。此外,每個命令都可以啓用/禁用,然後由相應控件的可視狀態反映出來。即使超出了MVVM和WPF的界限,它也是quite a common pattern
+0

我希望有一種方法可以做出2個正確答案,感謝您的幫助,未來我想我會將這樣的問題分成2個。 – 2009-11-24 04:48:49

相關問題