私はウィンドウを持っていて、そのdatacontextはビューモデルです。今、VMとウィンドウ(ビュー)の範囲外に、私は呼び出されるメソッドがあります。このメソッドはウィンドウを表示してユーザーに何かを変更させる必要があり、ユーザーが完了すると、ウィンドウを閉じてメソッドを続行する必要があります。トリッキーなことは、私はウィンドウ上のボタンをviewmodelのコマンドにバインドしている。これらのコマンドは 'userCancelled'や 'userOked'のようなイベントを発生させます。だから私はこれらのイベントをキャッチして、いつウィンドウを閉じてメソッドを続けるかを知りたい。ウィンドウが閉じるのを待ってウィンドウイベントをキャッチします。
私はShowDialogを使用する場合、イベントはキャッチされません(私はスレッドが閉じてダイアログを待っているので結構です)。しかし、私がショーを使用する場合、メソッドはロールオーバーします。私はそれを待つ必要がある。私はいくつかのブール値がオンに切り替わるまでThread.Sleepを試しましたが、それもスレッドを結びつけて、ウィンドウを使用不可能にします(.Show()を使用します)。
私はbackgroundWorkerを作成しようとしましたが、私はまだ同じ問題を抱えています。
私はボタン上でコードビハインドを使用することができますが、OKボタンの場合、viewModelはその状態が有効であることを確認する必要があります。 viewmodelとの協議は、MVVMの疎結合スタイルのポイントを打ち負かしていますか?
私は自分でWPFとMVVMを学習しています。私はそれを正しく行い、実用的なところで良いデザインの校長に固執したいと思います。私はこれをどのようにすべきですか?私は間違って何をしていますか?ありがとう。
今、私はちょうどViewModelにWindowプロパティを追加しました。私はwindow.close()を必要に応じてviewmodelで呼び出しています。私はMVVMでこれを行う "正しい"方法を知りたいです。 –
update:ビューモデルにCloseWindowアクションを作成し、ウィンドウとビューモデルを結びつけると、そのアクションを匿名デリゲートを使ってウィンドウのClose()メソッドと同じに設定すると、時間が許せばプリズムについて学習します。 –