Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从Backback中删除viewmodel的关联页面时,从内存中清除viewmodel-WP8.1_C#_Mvvm_Navigation_Windows Phone 8.1_Mvvm Light - Fatal编程技术网

C# 从Backback中删除viewmodel的关联页面时,从内存中清除viewmodel-WP8.1

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实例)重载来删除实例 您

在我的应用程序中,有几个页面(比如-a、B、C)与它们各自的视图模型(VMA、VMB、VMC)相关联。当用户到达C页时,我想从backstack中删除B页,并从ViewmodelLocator的容器中删除其ViewModel(VMB)

结果应该是b A->C

我是MVVM light的新手。有没有办法做到这一点

更新


通过设置框架的导航状态,我可以从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。这将确保没有多个实例。谢谢你的帮助:)