私はC#、WPF、およびMVVMパターンで新しくなっています。この非常に長い記事で申し訳ありませんが、私はすべての私の理解のポイント(あるいは理解していないこと)を設定しようとしています。コマンドとMVVMの原則 - RelayCommands
WPFとMVVMパターンによって提供されるコマンドメカニズムで多くのテキストを勉強した後、私はこれらのものをどのように使用するかについて、私の心をまっすぐにしています。
私は、WPFに用意されているコマンドで、ビジュアルツリーのコンポーネントに保持されているコマンドロジックに複数の「呼び出しポイント」を定義できることを理解しています。コマンドが呼び出されると、コールは、コマンドロジックがどこにあるかを定義するCommandBindingを保持する要素に衝突するまで、ビジュアルツリー(コマンドターゲットまたはフォーカスされた要素から開始)を介してバブルします。
これは、ロジックや呼び出しポイントを最初に指定せずにパブリックコマンドを定義できるという点でいいですね。
また、ビューのViewModelはロジックを処理する必要がありますが、コマンドの基本WPF実装では、呼び出しがビジュアルツリーを介して呼び出しを処理するため、ビジュアル要素でしか処理できません。
この場合、ビューの要素(たとえばボタン)によって呼び出されるコマンドを、下位のViewModelのRelayCommandオブジェクトにバインドするときに、Josh SmithのRelayCommandなどのカスタム実装を使用できることがわかりました。
しかし、私たちがViewModelで参照されている実装を直接指定しているので、それが(WPFコマンドパターンの定義によって)どのようにコマンドであるかわかりません。この方法では、ロジックがどこに実装されているかを知らなくても、どこからでもコマンドを呼び出せるという利点がすべて失われます。この場合、なぜClickイベントハンドラを直接使用しないのですか?
誰かが私のどこに間違っているか説明できますか? (最後まで投稿を読んでくれてありがとう!)
よろしくお願いします。 NR
偉大な答え。私もWPFを学んでいる途中です。私はかなり難しいと感じています。他のメソッドから呼び出されたコマンドに含まれているロジックをどのように使用するかについて、あなたはコメントできますか?私はこの場合、適切なロジックを持つメソッドを記述し、これをコマンドから呼び出すとします。御時間ありがとうございます。 – MoonKnight
@Killercam一般に、呼び出す各「メソッド」は1つの「ICommand」内にカプセル化されます。複数のメソッドを作成するだけのICommandを持つこともできます(> 1メソッドを呼び出すメソッドのように)。 –
ありがとうございました。 – MoonKnight