Mvvm-view-viewmodel-communication
MVVM –ビュー/ViewModel通信
この章では、MVVMアプリケーションに対話性を追加する方法と、ロジックをきれいに呼び出す方法を学習します。 また、MVVMパターンの中心である疎結合と適切な構造化を維持することにより、これらすべてが行われることもわかります。 これをすべて理解するために、まずコマンドについて学習しましょう。
コマンドを介したView/ViewModel通信
コマンドパターンは十分に文書化されており、数十年にわたって頻繁にデザインパターンを使用しています。 このパターンには、呼び出し側と受信側の2つの主なアクターがあります。
View and ViewModel Communication
呼び出し側
- 呼び出し側は、いくつかの命令型ロジックを実行できるコードです。
- 通常、ユーザーがUIフレームワークのコンテキストで操作するのはUI要素です。
- アプリケーション内の別の場所にあるロジックコードの別のチャンクである可能性があります。
受信機
- レシーバーは、呼び出し側が起動したときに実行するためのロジックです。
- MVVMのコンテキストでは、受信者は通常、呼び出す必要があるViewModelのメソッドです。
これら2つの間に障害層があります。これは、呼び出し側と受信側が互いについて明示的に知る必要がないことを意味します。 これは通常、呼び出し側に公開されるインターフェース抽象化として表され、そのインターフェースの具体的な実装はレシーバーを呼び出すことができます。
コマンドと、それらを使用してViewとViewModelの間で通信する方法を学習する簡単な例を見てみましょう。 この章では、前の章と同じ例を続けます。
StudentView.xamlファイルには、ViewModelからの学生データを接続するListBoxがあります。 次に、リストボックスから生徒を削除するためのボタンを追加しましょう。
重要なことは、ICommandに接続するためのコマンドプロパティがあるため、ボタン上のコマンドの操作が非常に簡単であることです。
そのため、次のコードに示すように、ICommandを持ち、ボタンのコマンドプロパティからバインドするViewModelのプロパティを公開できます。
プロジェクトに新しいクラスを追加して、ICommandインターフェイスを実装します。 以下は、ICommandインターフェイスの実装です。
ご覧のとおり、これはICommandの単純な委任実装であり、1つはexecuteMethodに、もう1つは作成時に渡すことができるcanExecuteMethodに2つのデリゲートを持っています。
上記の実装では、2つのオーバーロードされたコンストラクターがあります。1つはexecuteMethod専用で、もう1つはexecuteMethodとI canExecuteMethodの両方です。
StudentView ModelクラスにMyICommandタイプのプロパティを追加しましょう。 次に、StudentViewModelにインスタンスを構築する必要があります。 2つのパラメーターを取るMyICommandのオーバーロードされたコンストラクターを使用します。
次に、OnDeleteメソッドとCanDeleteメソッドの実装を追加します。
また、ユーザーがListBoxからSelected Itemを削除できるように、新しいSelectedStudentを追加する必要があります。
以下は、ViewModelクラスの完全な実装です。
StudentView.xamlでは、SelectStudentプロパティにバインドするListBoxにSelectedItemプロパティを追加する必要があります。
完全なxamlファイルを次に示します。
上記のコードをコンパイルして実行すると、次のウィンドウが表示されます。
View and ViewModel Communication MainWindow1
削除ボタンが無効になっていることがわかります。 アイテムを選択すると有効になります。
View and ViewModel Communication MainWindow2
いずれかの項目を選択して、削除を押すと。 選択した項目リストが削除され、削除ボタンが再び無効になることがわかります。
View and ViewModel Communication MainWindow3
理解を深めるために、上記の例を段階的に実行することをお勧めします。