【问题标题】:RelayCommand weak reference with lambda带有 lambda 的 RelayCommand 弱引用
【发布时间】:2015-01-23 22:31:53
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-10
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多