我在wp8.1中使用MVVM Light和通用应用程序有以下问题。在我的构造函数的ViewModel中,我创建了一个简单的RelayCommand,其中包含lambda而不是对方法的引用。问题是,有时当我在手机上导航到桌面然后回到应用程序时 - 弱引用已经消失。我确实理解使用弱引用的原因,但我不明白为什么在不卸载View和ViewModel时会删除它。通过Frame.GoBack返回页面时也会发生同样的情况。即使没有页面缓存(然后创建新实例),引用也会突然收集。
GoHomeCommand = new RelayCommand(() =>
{
navigationService.NavigateTo("ScheduleChoicePage");
});
<AppBarButton x:Uid="HomePage" Command="{Binding GoHomeCommand}"/>
看起来,当使用方法的引用时,而不是lambda - 没有问题。
答案 0 :(得分:0)
实际发布此引用不是加载/卸载/导航的问题。它只是垃圾收集器的问题。没有对此lambda的强引用,因此可以在创建它之后随时收集它。
解决方法是在创建动作时不使用lambda,或者在ViewModel对象中的某处保留lambda引用。