RelayCommand与lambda的弱引用

时间:2015-01-23 22:31:53

标签: windows-runtime windows-phone-8.1 mvvm-light win-universal-app

我在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 - 没有问题。

1 个答案:

答案 0 :(得分:0)

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

解决方法是在创建动作时不使用lambda,或者在ViewModel对象中的某处保留lambda引用。