【发布时间】:2013-09-06 03:26:11
【问题描述】:
我有一个包含多个区域的“父”视图,我将其他视图加载到其中。这些“子”视图始终相同,并且在运行时不会更改,因此它们在应用程序启动期间使用regionManager.RegisterViewWithRegion... 语法向其区域注册。目前所有的视图都是单例的,我使用 Castle Windsor for IoC。
请记住,在嵌套区域中的视图模型上不会调用“INavigationAware”方法,那么初始化和清理我的子视图的好方法是什么?父虚拟机保存对子虚拟机的引用(注入)是“可接受的”设计吗?然后我可以从父级的OnNavigatedTo()/From() 方法中调用子虚拟机上的某种初始化/清理方法吗?
另一个选项可能是将视图更改为瞬态,然后我可以简单地使用构造函数进行初始化,而不用担心清理(我只是在视图被重新使用和显示之前清除旧的“状态” )。 唯一的潜在问题是我的应用程序使用“事件服务”(类似于 Prism 的事件代理),其中一些视图模型充当发布者,而其他视图模型充当订阅者。我担心如果我将它们设为瞬态,视图模型将不会因为事件订阅而被 GC,并且这些“死”视图将继续响应事件。这个对吗?如果是这样,我大概需要实施一种清理方式(如上所述),我可以在哪里取消订阅?
【问题讨论】: