これに似た質問があります
WPFアプリを開発するときに、なぜ、どのような状況でイベントを避ける必要がありますか(そしてコマンドが優先されますか?) イベントの方法をたどる/維持するのが難しくなりすぎる実用的な例が欲しいです(それが私の主な関心事です)。
イベントは、パブリッシャーとサブスクライバーの間の密結合を実装します。形式は固定的で、スケーリングが困難です。最も忌まわしいことに、発行者はその購読者が誰であるかを知らないため、すべての購読者がいなくなっても発行を続けます。これにより、メモリ リークが発生します。
さらに、ViewModel に、ユーザー サーフェスで発生したイベントをリッスンするハンドラーが含まれている場合、ViewModel で制御されたテストを実行するには、これらのイベントを人工的に作成する必要があります。そして、あなたの質問によると、これは難しい場合があります。
一方、コマンドは、ViewModel が予測可能な状態にあり、CanExecute クエリに true を返す場合にのみ実行されます。CanExecute クエリが true を返すと、コマンドを実行でき、その変化を正確かつ包括的に観察できます。
実際には、多くのハンドラーを含む ViewModel は、開発者がアプリを起動して特定の条件を探すときにテストされます。コマンド パターンを使用する ViewModel は、午前 2 時に全員が家で寝ているときにテストできます。
あなたの例... ユーザー ストーリー: リスト ボックス内のアイテムをダブルクリックし、5 秒以内に [OK] をクリックすると、データベースに対するクエリが生成されます。ただし、火曜日で、バンコクで雨が降っている場合に限ります。
イベント モデル: プログラミングが難しく、総合的なテストが不可能 (火曜日でない限り:))、拡張が不可能、バグが繰り返された後、ユーザーはあなたの作業に自信を失います。
コマンド モデル: プログラミングとテストが簡単で、要件が変更されるたびに 100% のテスト カバレッジを証明できます。