2012-02-06 7 views
2

実際に私はウィザードコントロールをしようとしています。私は次のボタンをクリックすると3ページを動的に読み込みます。次のボタンをクリックすると、ページの詳細を格納する必要があるので、usercontrolを格納する辞書を作成しておく必要があります。前のページの詳細を保存するための他の提案はありますか?以前のウィザードページはどのように保存できますか?

+0

私が発見したのは、私が辞書で使ったUserControlはWindows.Forms.UserControlです。しかし、私はWindows.Controls.UserControlを追加しました.. – Tanya

+0

いいえ..誰も私にWPFを学ぶのに役立つ、前のページの詳細を格納するための提案を私に与えたら、私はWPFとMVVMにはとても新しいです。 – Tanya

+1

は、この偉大な記事を見てください: http://www.codeproject.com/Articles/31837/Creating-an-Internationalized-Wizard-in-WPF – SvenG

答えて

2

要件を達成する方法はたくさんあります。これは私がやることですが、私はMVVMのデザインパターンと非常にインラインであると思います。

  1. あなたがページに関係なく、パーティションの(集めたいすべて変数が含まれているのViewModelクラスを定義します。
  2. 「currentPageに」という名前のパブリックプロパティを追加します。
  3. のフレームを定義しますウィザード。のStackPanelとおそらく<ウィンドウ>要素、(あなたがしたい場合は「完了」)。ウィンドウ上部にタイトルを持っている、と「前へ」と「次へ」ボタンの下にあるエリアです。
  4. StackPanelのメイン領域にaを入れ、そのDataContextをVにバインドしますViewModelには
  5. iewModel
  6. 次へと県のコマンドを作成する(プリズムDelegateCommandを使用するか、またはのICommandから派生し、独自の軽量バージョンを実装します。 6また、適切なCanExecuteロジック(十分なデータを収集していますか?)を使用して、 'Finish'ボタンをコマンドにバインドします。
  7. NextおよびPrev 'CanExectue'ロジックは、currentPageを参照します。例えばPrevコマンドCanExecuteは、currentPageが0のときにfalseを返します。
  8. 各ページに1つの異なる3つのデータテンプレートがあります。各データテンプレートは、そのページで収集するプロパティの異なるサブセットを表示します。 ViewModelのプロパティにUIコントロールをバインドし、バインディングモードを2通りにします。
  9. INotifyPropertyChangedからViewModelを派生させ、すべての設定者に適切な通知を発しさせるようにします。少なくともcurrentPageプロパティには必須ですが、ソリューションの完成にはすべてのプロパティに対して行います。
  10. NextおよびPrevコマンドでは、ExecuteメソッドはcurrentPageプロパティを変更します(Setterは通知を発行する必要があります)。ビューは自動的に更新されます。
  11. メイン領域のItemControlには、DataTemplateSelectorから派生したWizardTemplateSelectorを実装します。それをリソースとして定義し、{StaticResource}バインディングを使用してItemControl.ContentTemplateSelectorを割り当てます。
  12. また、ウィンドウの左側に、現在のページにバインドされた選択項目インデックスを持つリストコントロールを使用することもできます。

EDIT(Explainer):基本的な考え方は、複数の異なるデータテンプレートで表示できる単一のViewModelを現在のページに依存させることです。

関連する問題