在 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;
}
使用 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;
}