有很多方法可以實現您的要求。這就是我所要做的,我認爲這與MVVM設計模式非常接近。
- 定義包含要收集(不管分區到頁面的所有的變量視圖模型類。
- 添加一個名爲「當前頁」的公共屬性。
- 定義的框架嚮導可能是一個<Window>元素,帶有一個StackPanel,窗口頂部有一個標題,底部有'prev'和'next'按鈕的區域(如果你願意的話,還有'finish')。
- 在StackPanel的主要區域放置並綁定其DataContext到V iewModel
- 在ViewModel中創建一個Next和Pref命令(使用Prism DelegateCommand,或者實現自己從ICommand派生的輕量級版本。 6 /另外,使用適當的CanExecute邏輯將'Finish'按鈕綁定到一個命令(是否收集了足夠的數據?)。
- Next和Prev'CanExectue'邏輯將查看currentPage。例如當currentPage爲0時,Prev命令CanExecute將返回false。
- 您將擁有3個不同的數據模板,每個頁面一個。每個數據模板將呈現您希望在該頁面收集的不同屬性子集。將UI控件綁定到ViewModel的屬性,並使用綁定模式兩種方式。
- 從INotifyPropertyChanged派生您的ViewModel,並讓所有的設置者觸發相應的通知。它至少需要currentPage屬性,但是對於解決方案的完成,請爲所有屬性執行此操作。
- 在Next和Prev命令中,Execute方法將修改currentPage屬性(Setter應該觸發通知)。該視圖將自動更新。
- 對於主區域ItemControl,實現從DataTemplateSelector派生的WizardTemplateSelector。將其定義爲資源,並使用{StaticResource}綁定分配ItemControl.ContentTemplateSelector。
- 如果需要,還可以在窗口左側有一個List控件,並將Selected Item Index綁定到當前頁面。
編輯(解釋器):基本思想是有一個ViewModel,可以在幾個不同的數據模板中查看,取決於當前頁面。
來源
2012-02-06 13:32:39
Uri
我發現,我在字典中使用的UserControl是Windows.Forms.UserControl。但我已經添加了Windows.Controls.UserControl .. – Tanya 2012-02-06 06:34:44
否否..如果有人給我一些建議來存儲前一頁的細節,這將有助於我學習WPF,我對WPF和MVVM很新。 – Tanya 2012-02-06 06:41:02
看看這個偉大的文章: http://www.codeproject.com/Articles/31837/Creating-an-Internationalized-Wizard-in-WPF – SvenG 2012-02-06 09:41:28