私は WPF と MVVM の問題を学習しようとしていますが、問題が発生しました。この質問は似ていますが、これとまったく同じではありません(handling-dialogs-in-wpf-with-mvvm) ...
MVVM パターンを使用して記述された「ログイン」フォームがあります。
このフォームには、通常のデータ バインディングを使用して XAML でビューにバインドされているユーザー名とパスワードを保持する ViewModel があります。また、通常のデータバインディングを使用して、フォームの「ログイン」ボタンにバインドされた「ログイン」コマンドもあります。
「Login」コマンドが起動すると、ViewModel 内の関数が呼び出され、ネットワーク経由でデータが送信されてログインされます。この関数が完了すると、次の 2 つのアクションが実行されます。
ログインが無効でした - MessageBox を表示するだけで問題ありません
ログインは有効でした。ログイン フォームを閉じて、true を返す必要があり
DialogResult
ます。
問題は、ViewModel が実際のビューについて何も知らないことです。そのため、ビューを閉じて、特定の DialogResult を返すように指示するにはどうすればよいでしょうか?? CodeBehind にいくつかのコードを貼り付けたり、View を ViewModel に渡したりすることもできますが、それは MVVM のポイント全体を完全に無効にするようです...
アップデート
結局、私はMVVMパターンの「純度」に違反し、ビューにClosed
イベントを発行させ、Close
メソッドを公開させました。ViewModel は を呼び出すだけview.Close
です。ビューはインターフェイスを介してのみ認識され、IOC コンテナーを介して接続されるため、テスト容易性や保守性が失われることはありません。
受け入れられた回答が-5票であることは、かなりばかげているようです! 「純粋」でありながら問題を解決することで得られる気持ちの良さはよく知っていますが、1 行のメソッドを回避するためだけに 200 行のイベント、コマンド、および動作が必要だと考えるのは私だけではありません。 「パターン」と「純度」の名前は少しばかげています....