5

私はMVVMパターンを学ぼうとしています。私が抱えている主な問題は、コマンド オブジェクトを宣言、作成、バインドする場所を学習することです。

2 つの例:

  1. スイッチ ボードまたはメイン メニューのように機能するメイン フォームがあります。選択ボタン 1 とビュー 1 が表示され、選択ボタン 2 とビュー 2 が表示されます。偉大な。ここで、メイン フォームに戻りたいので、ビュー 1 (およびビュー 2) に「メイン メニュー」というボタンが必要です。「ShowMainMenu」コマンドにバインドできるようにするには、コマンドとコマンド ハンドラをどこで定義すればよいですか? View2ViewModel でそれらを作成できますが、メイン ビューを表示するアクセス権がありませんか? または、MainView モデルで thim を作成することもできますが、子ビュー モデルでそれらにバインドするにはどうすればよいですか (mvvm の推奨事項に従って RelayCommand obejct を使用しており、親にバブルアップしません)。

  2. 1 つのメイン ウィンドウ ビューに 2 つのユーザー コントロールが表示されています。これらを MainView、UC1、および UC2 と呼びましょう。これらのそれぞれには、ViewModel MainViewModel、UC1ViewModel、UC2View Model があります。UC1 に「AddItem」というボタンがあります。UC2 のリストにアイテムを追加する必要があります。「AddItemCommand」を設定してバインドする正しい方法は何ですか。コマンドは、MainViewModel、Uc1ViewModel、または UC2ViewModel にある必要がありますか? そして、どのように私はそれにバインドする必要があります。

ご協力いただきありがとうございます。

4

2 に答える 2

2

MainModel には、各 UCxViewModel のプロパティ、または簡単に ViewModel のリストを含めることができます。「表示」コマンドは、対応する UVxViewModel を作成し、UVxViewModel によって公開された「OnClose」イベントをサブスクライブし、それをリストに追加します。MainView には、このリストにバインドされたコントロール (たとえば、Tab コントロール) と、各 UCxViewModel に使用されるビューを定義する DataTemplates があります。UVxViewModel がその OnClose イベントを発生させると、MainModel はそれをリストから削除し、対応するビューを「閉じます」。

「項目の追加」部​​分では、ViewModel は同じ項目リスト (モデル) を共有する必要があります。その後、UC2ViewModel は項目を追加でき、UC1View は更新されます (リストが INotifyCollectionChanged を実装している場合)。

この説明は、MVVM を理解するのに非常に役立ちました。

于 2009-12-05T14:25:58.250 に答える