Windows runtime 带lambda的RelayCommand弱参考

Windows runtime 带lambda的RelayCommand弱参考,windows-runtime,windows-phone-8.1,mvvm-light,win-universal-app,Windows Runtime,Windows Phone 8.1,Mvvm Light,Win Universal App,我在wp8.1中将MVVM Light与通用应用程序一起使用时遇到以下问题。在构造函数中的ViewModel中,我使用lambda创建了一个简单的RelayCommand,而不是对方法的引用。问题是,有时当我在手机上导航到桌面,然后返回应用程序时,弱引用就消失了。我确实理解使用弱引用的原因,但我不理解为什么在不卸载视图和ViewModel时它会删除。通过Frame.GoBack返回页面时也会发生同样的情况。即使没有页面缓存创建的新实例,引用也会突然设置为collected GoHomeComma

我在wp8.1中将MVVM Light与通用应用程序一起使用时遇到以下问题。在构造函数中的ViewModel中,我使用lambda创建了一个简单的RelayCommand,而不是对方法的引用。问题是,有时当我在手机上导航到桌面,然后返回应用程序时,弱引用就消失了。我确实理解使用弱引用的原因,但我不理解为什么在不卸载视图和ViewModel时它会删除。通过Frame.GoBack返回页面时也会发生同样的情况。即使没有页面缓存创建的新实例,引用也会突然设置为collected

GoHomeCommand = new RelayCommand(() =>
        {
            navigationService.NavigateTo("ScheduleChoicePage");
        });

 <AppBarButton x:Uid="HomePage" Command="{Binding GoHomeCommand}"/>

不过,当使用方法引用时,而不是lambda时,似乎没有问题。

实际上,释放此引用不是加载/卸载/导航的问题。这只是垃圾收集器的问题。没有对此lambda的强引用,因此可以在创建后随时收集它

解决方案是在创建操作时不使用lambda,或者在ViewModel对象中的某个位置保留lambda引用