2012-02-06 45 views
2

其實我試圖做一個嚮導控制。其中我點擊下一個按鈕時動態加載3頁。當我點擊下一個按鈕時,我需要存儲頁面細節,所以我創建了一個字典來存儲用戶控件。是否有任何其他建議來存儲前一頁的詳細信息。如何存儲以前的嚮導頁?

+0

我發現,我在字典中使用的UserControl是Windows.Forms.UserControl。但我已經添加了Windows.Controls.UserControl .. – Tanya 2012-02-06 06:34:44

+0

否否..如果有人給我一些建議來存儲前一頁的細節,這將有助於我學習WPF,我對WPF和MVVM很新。 – Tanya 2012-02-06 06:41:02

+1

看看這個偉大的文章: http://www.codeproject.com/Articles/31837/Creating-an-Internationalized-Wizard-in-WPF – SvenG 2012-02-06 09:41:28

回答

2

有很多方法可以實現您的要求。這就是我所要做的,我認爲這與MVVM設計模式非常接近。

  1. 定義包含要收集(不管分區到頁面的所有的變量視圖模型類。
  2. 添加一個名爲「當前頁」的公共屬性。
  3. 定義的框架嚮導可能是一個<Window>元素,帶有一個StackPanel,窗口頂部有一個標題,底部有'prev'和'next'按鈕的區域(如果你願意的話,還有'finish')。
  4. 在StackPanel的主要區域放置並綁定其DataContext到V iewModel
  5. 在ViewModel中創建一個Next和Pref命令(使用Prism DelegateCommand,或者實現自己從ICommand派生的輕量級版本。 6 /另外,使用適當的CanExecute邏輯將'Finish'按鈕綁定到一個命令(是否收集了足夠的數據?)。
  6. Next和Prev'CanExectue'邏輯將查看currentPage。例如當currentPage爲0時,Prev命令CanExecute將返回false。
  7. 您將擁有3個不同的數據模板,每個頁面一個。每個數據模板將呈現您希望在該頁面收集的不同屬性子集。將UI控件綁定到ViewModel的屬性,並使用綁定模式兩種方式。
  8. 從INotifyPropertyChanged派生您的ViewModel,並讓所有的設置者觸發相應的通知。它至少需要currentPage屬性,但是對於解決方案的完成,請爲所有屬性執行此操作。
  9. 在Next和Prev命令中,Execute方法將修改currentPage屬性(Setter應該觸發通知)。該視圖將自動更新。
  10. 對於主區域ItemControl,實現從DataTemplateSelector派生的WizardTemplateSelector。將其定義爲資源,並使用{StaticResource}綁定分配ItemControl.ContentTemplateSelector。
  11. 如果需要,還可以在窗口左側有一個List控件,並將Selected Item Index綁定到當前頁面。

編輯(解釋器):基本思想是有一個ViewModel,可以在幾個不同的數據模板中查看,取決於當前頁面。