要件を達成する方法はたくさんあります。これは私がやることですが、私はMVVMのデザインパターンと非常にインラインであると思います。
- あなたがページに関係なく、パーティションの(集めたいすべて変数が含まれているのViewModelクラスを定義します。
- 「currentPageに」という名前のパブリックプロパティを追加します。
- のフレームを定義しますウィザード。のStackPanelとおそらく<ウィンドウ>要素、(あなたがしたい場合は「完了」)。ウィンドウ上部にタイトルを持っている、と「前へ」と「次へ」ボタンの下にあるエリアです。
- StackPanelのメイン領域にaを入れ、そのDataContextをVにバインドしますViewModelには
- iewModel
次へと県のコマンドを作成する(プリズムDelegateCommandを使用するか、またはのICommandから派生し、独自の軽量バージョンを実装します。 6また、適切なCanExecuteロジック(十分なデータを収集していますか?)を使用して、 'Finish'ボタンをコマンドにバインドします。
- NextおよびPrev 'CanExectue'ロジックは、currentPageを参照します。例えばPrevコマンドCanExecuteは、currentPageが0のときにfalseを返します。
- 各ページに1つの異なる3つのデータテンプレートがあります。各データテンプレートは、そのページで収集するプロパティの異なるサブセットを表示します。 ViewModelのプロパティにUIコントロールをバインドし、バインディングモードを2通りにします。
- INotifyPropertyChangedからViewModelを派生させ、すべての設定者に適切な通知を発しさせるようにします。少なくともcurrentPageプロパティには必須ですが、ソリューションの完成にはすべてのプロパティに対して行います。
- NextおよびPrevコマンドでは、ExecuteメソッドはcurrentPageプロパティを変更します(Setterは通知を発行する必要があります)。ビューは自動的に更新されます。
- メイン領域のItemControlには、DataTemplateSelectorから派生したWizardTemplateSelectorを実装します。それをリソースとして定義し、{StaticResource}バインディングを使用してItemControl.ContentTemplateSelectorを割り当てます。
- また、ウィンドウの左側に、現在のページにバインドされた選択項目インデックスを持つリストコントロールを使用することもできます。
EDIT(Explainer):基本的な考え方は、複数の異なるデータテンプレートで表示できる単一のViewModelを現在のページに依存させることです。
出典
2012-02-06 13:32:39
Uri
私が発見したのは、私が辞書で使ったUserControlはWindows.Forms.UserControlです。しかし、私はWindows.Controls.UserControlを追加しました.. – Tanya
いいえ..誰も私にWPFを学ぶのに役立つ、前のページの詳細を格納するための提案を私に与えたら、私はWPFとMVVMにはとても新しいです。 – Tanya
は、この偉大な記事を見てください: http://www.codeproject.com/Articles/31837/Creating-an-Internationalized-Wizard-in-WPF – SvenG