0

TabViewModel を含むシェルがあります (プロパティとして個別に、ContentControl を介してビューに表示されます)。TabViewModel でドキュメントを開きます。ドキュメントの VM は、ドキュメントの読み込みと保存を LoadSaveVM に依存します。それ自体が IScreen オブジェクトのコンダクターであるドキュメント VM は、子 VM を使用してドキュメントのデータを表示します。

今まで、すべてがかなりうまくいきました。「ダーティ」動作を実装しました。つまり、ドキュメントが変更された場合、ドキュメントはダーティとしてマークされます。したがって、ドキュメントを閉じるときに、保存するか、保存しないか、閉じるのをキャンセルするかをユーザーに尋ねます。

これらはすべて、Caliburn.Micro の通常のフレームワーク ( IGuardCloseDefaultCloseStrategyConductor<IScreen>など) を通じて処理されます。

問題は、ドキュメント VM が閉じられ、ユーザーが保存を選択すると、TabViewModel のItemsInvalidOperationExceptionプロパティが変更されるため、List のEnumeratorから取得されることです (LoadSaveVM は保存を処理するように示されています)。

保存は、TabVM の ActiveItem、つまりコルーチンを返すドキュメント VM に委譲されたシェル (SaveDocument) でコルーチンを呼び出すことによって呼び出され、TabVM で LoadSaveVM が実行されるとすぐに終了します。

私の立場からすると、2 つの解決策が考えられます。

  • TabViewModel のクロージング戦略を変更する
  • ロード/保存が完了するまで終了する DocumentVM の SaveDocument コルーチンの動作を変更します。

ただし、私の意見では、少なくとも私の場合、どちらのソリューションもあまりクリーンではありません。

注: ドキュメントは実際にはファイルであり、ロード/保存には時間がかかります (したがって、LoadSaveVM はそのような操作の進行状況を示します)。

4

0 に答える 0