【发布时间】:2018-02-28 15:16:24
【问题描述】:
UWP 应用程序(Prism.Unity NuGetPackage 6.3.0)
当多次导航到同一个页面时,会创建其视图模型的新实例,而旧的实例会保存在内存中并且不会被释放。
这会导致崩溃,因为全局事件会使用事件聚合器多次触发,也会被监听它的旧 ViewModel 接收。
我们使用 NavigationService 来导航页面。我们的页面和用户控件在 XAML 中使用prismMvvm:ViewModelLocator.AutoWireViewModel="True" 绑定到视图模型。
我们已经看到一些关于类似问题的主题,解决方案是使用 Regions 添加区域行为。但是,据我所知,Prism UWP 在其当前版本中不支持区域。
我们认为问题与 ViewModelLocator 和 NavigationService 有关,因为使用 Container.RegisterType 和不同的 LifetimeManager 注册视图模型没有效果。
崩溃示例可以从 GitHub 下载:App1.zip
复制:
- 执行应用程序
- 在 Test1 和 Test2 之间多次导航
- 点击“RaiseEvent”以执行全局事件
- 记录其哈希码的所有实例
- 应用程序应该在某个时候崩溃
【问题讨论】: