【发布时间】:2012-01-16 18:29:42
【问题描述】:
我正在编写遵循 MVVM 模式的 WP7 应用程序。
我有 ViewModelLocator,它确保 ViewModel 的每个实例只有一个。这些 ViewModel 是在应用程序启动时创建的。 ViewModel 使用消息相互通信。我使用导航到下一页的消息(为此,我使用 NavigationService.Navigate(),它是从 MainPage CodeBehind 引发的 - 它是 CodeBehind 中的唯一功能)。通过将 Page 中的 DataContext 设置为 ViewModelLocator,将 View 和 ViewModel 连接在一起。
一切一见钟情。
但是在每次导航期间,都会创建一个新的 Page 实例,该实例从 ViewModelLocator 连接到 ViewModel(这是为其设计的)。结果是:当用户经常在页面之间切换时,一个页面的多个实例连接到一个ViewModel。当然,在某一时刻只能看到一页。
非常简单的解决方案是设置 NavigationCache,但它在 WP7 中是只读的。
我正在寻找不良行为的解决方案。
【问题讨论】:
-
在页面卸载函数中尝试将DataContext设置为Null,然后GC会更快地收集页面。
标签: mvvm navigation windows-phone-7.1