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