在我的MVVMC应用程序中,我有一个包含多个步骤的过程,基本上是一个向导。
我的控制器解析了外部视图(称之为
每个视图都将其ViewModel注入构造函数中,使用Unity容器进行注入。
当每个步骤完成时,View Model会发布一个事件,
在最后一步中,
下次进入向导时,我们创建所有视图和ViewModels的新实例,但是先前向导的事件订阅仍然存在。
如何使我的视图模型意识到它们已被停用,以便我可以取消订阅我的事件?
另一个选项是在事件处理程序中取消订阅事件。 这可能有效,但当我在向导中后退并需要重新订阅事件时,会增加复杂性。
我的控制器解析了外部视图(称之为
WizardView
),并将其添加到主区域。
WizardView
包含一个面包屑导航,用于显示通过向导的进展情况,并包含一个子区域,用于加载其他视图(称之为WizardRegion
)。 Step1View
是加载到WizardRegion
中的第一个视图。每个视图都将其ViewModel注入构造函数中,使用Unity容器进行注入。
WizardViewModel
订阅了几个事件聚合事件,这些事件由步骤视图模型发布。当每个步骤完成时,View Model会发布一个事件,
WizardViewModel
使用它来存储状态,这意味着WizardViewModel
正在收集我们进行的每个步骤的数据。 步骤ViewModel还调用控制器来将下一步加载到WizardRegion
中。在最后一步中,
WizardViewModel
保存向导的结果,并且MainRegion
导航回其他屏幕。下次进入向导时,我们创建所有视图和ViewModels的新实例,但是先前向导的事件订阅仍然存在。
如何使我的视图模型意识到它们已被停用,以便我可以取消订阅我的事件?
另一个选项是在事件处理程序中取消订阅事件。 这可能有效,但当我在向导中后退并需要重新订阅事件时,会增加复杂性。