在 WP81 上使用 Caliburn 导航回来时如何缓存以前的视图?

How can I cache the previous view when navigating back with Caliburn on WP81?

使用 WP81 中的 Caliburn,当您导航到一个视图模型并从那里导航到另一个视图模型时,一旦您导航回前一个视图模型,无论您在页面上设置什么缓存模式,视图都会从头开始重新加载。

有什么方法(或最好的方法)可以在返回时 "cache" 以前的 view/viewmodel 状态吗?

Github 上有一个关于此的未解决问题,请参阅 https://github.com/Caliburn-Micro/Caliburn.Micro/issues/95. I describe my solution in a comment there https://github.com/Caliburn-Micro/Caliburn.Micro/issues/95#issuecomment-124473140

基本上,您应该使用 3.0.0 分支中可用的 CachingFrameAdapter,方法是直接使用 3.0.0 分支或从中取出 CachingFrameAdapter 并在您的代码中使用它当前的 Caliburn 版本 (2.x).

如果你和我一样走第二条路,把CachingFrameAdapter加到你的项目中,把你的App.xaml.cs里的PrepareViewFirst换成这个

protected override void PrepareViewFirst(Frame rootFrame)
{
   RegisterNavigationService(rootFrame);
}

public INavigationService RegisterNavigationService(Frame rootFrame, bool treatViewAsLoaded = false)
{
    if (rootFrame == null)
        throw new ArgumentNullException("rootFrame");

    var frameAdapter = new CachingFrameAdapter(rootFrame, treatViewAsLoaded);

    container.RegisterInstance(typeof(INavigationService), null, frameAdapter);

    return frameAdapter;
}