CanClose - 父母指挥中的新孩子保存文件

时间:2013-03-25 19:10:58

标签: c# caliburn.micro lifecycle

我有shell,其中包含TabViewModel(作为属性单独显示,并通过ContentControl显示在View中)。在TabViewModel中,我打开一个文档。文档的VM依赖于LoadSaveVM来加载和保存文档。文档VM本身就是IScreen对象的指挥,但它使用子VM来显示文档的数据。

到目前为止,一切都很有效。我已经实现了'脏'行为,即当文档被更改时,它被标记为脏,因此当关闭它时,会询问用户,他/她是否要保存它,不保存它,或取消关闭。

所有这些都是通过Caliburn.Micro的常规框架(IGuardCloseDefaultCloseStrategyConductor<IScreen>等)来处理的。

问题在于,当文档VM关闭且用户选择保存时,我从List的枚举器中获取InvalidOperationException,因为TabViewModel的 Items 属性发生了变化(显示LoadSaveVM处理保存)。

通过在Shell(SaveDocument)上调用coroutine来调用保存,它被委托给TabVM的ActiveItem,即文件VM,它返回协同程序,一旦在TabVM中执行LoadSaveVM就会结束。

从我的立场出发,可能有两种解决方案:

  • 修改TabViewModel的结束策略
  • 修改DocumentVM的SaveDocument协同程序的行为,该程序将在加载/保存完成后结束。

但是,在我看来,至少在我的情况下,两种解决方案都不是很干净。

注意:文档实际上是一个文件,加载/保存需要很长时间(因此LoadSaveVM会显示此类操作的进度)。

0 个答案:

没有答案