C# 从Backback中删除viewmodel的关联页面时,从内存中清除viewmodel-WP8.1
在我的应用程序中,有几个页面(比如-a、B、C)与它们各自的视图模型(VMA、VMB、VMC)相关联。当用户到达C页时,我想从backstack中删除B页,并从ViewmodelLocator的容器中删除其ViewModel(VMB) 结果应该是b A->C 我是MVVM light的新手。有没有办法做到这一点 更新C# 从Backback中删除viewmodel的关联页面时,从内存中清除viewmodel-WP8.1,c#,mvvm,navigation,windows-phone-8.1,mvvm-light,C#,Mvvm,Navigation,Windows Phone 8.1,Mvvm Light,在我的应用程序中,有几个页面(比如-a、B、C)与它们各自的视图模型(VMA、VMB、VMC)相关联。当用户到达C页时,我想从backstack中删除B页,并从ViewmodelLocator的容器中删除其ViewModel(VMB) 结果应该是b A->C 我是MVVM light的新手。有没有办法做到这一点 更新 通过设置框架的导航状态,我可以从Backback中删除页面。如何删除viewmodel引用以防止内存泄漏?SimpleIoc提供了一个取消注册(TClass实例)重载来删除实例 您
通过设置框架的导航状态,我可以从Backback中删除页面。如何删除viewmodel引用以防止内存泄漏?SimpleIoc提供了一个取消注册(TClass实例)重载来删除实例 您可以在页面的终结器中使用它,但如果VM用于其他页面或存在多个实例,则必须检查其副作用
顾名思义,simpleIoc非常简单,不提供自动方式。目前我正在跟踪流,并将其从ViewModelLocator中删除。这是我在两个例子中所做的 1) 当用户从当前页面返回时 2) 当用户导航到B页时,此A页将从历史记录中清除。我从ViewModelLocator的容器中删除了一个的viewmodel,并调用它的清理来清除它的资源
我将在将来再次讨论这个问题,并尝试使用更新的mvvm light库。如果有人找到更好的方法,请提出建议。我在某个地方读到信使使用WeakReference。你能给我指出任何可以验证mvvm中SimpleIoc是否也使用弱引用的文档吗。我将不胜感激。谢谢。我只是仔细检查了一下,你是对的:实例是永远保留的。您必须使用unregister方法删除它们。我更新了answer.WP8,该函数用于在页面被销毁时启动的OnRemovedFromJournal。在Wp8.1中不存在这样的东西。何时调用注销函数很难管理。我不想在NavigatedFrom上注销它,因为当我从B->C导航或从C->B返回时会触发它。对此有什么线索吗?我认为MVVM light的ViewModelLocator将管理其他页面上的VM。这将确保没有多个实例。谢谢你的帮助:)