在每个视图中
public partial class View2 : UserControl, IRegionMemberLifetime, INavigationAware
{
public bool KeepAlive
{
get { return false; }
}
bool INavigationAware.IsNavigationTarget(NavigationContext navigationContext)
{
return true;
}
void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext)
{
// Intentionally not implemented.
}
void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
{
this.navigationJournal = navigationContext.NavigationService.Journal;
}
}
初始化:
container.RegisterType<object, View1>("View1");
container.RegisterType<object, View2>("View2");
regionManager.RequestNavigate("Window1", new Uri("View1", UriKind.Relative));
regionManager.RequestNavigate("Window2", new Uri("View2", UriKind.Relative));
我正在关注开发者指南,如果视图存在,它不会更改视图。
答案 0 :(得分:11)
您确定视图会被容器填充吗?
我建议您为RequestNavigate方法提供回调,这样您就可以通过NavigationResult
跟踪您的观看结果:
regionManager.RequestNavigate
(
"Window1",
new Uri("View2", UriKind.Relative),
(NavigationResult nr) =>
{
var error = nr.Error;
var result = nr.Result;
// put a breakpoint here and checkout what NavigationResult contains
}
);
答案 1 :(得分:2)
我已经看到,如果我实现IConfirmNavigateRequest并且不调用continutationCallback(true),则导航会安静地失败。
public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback)
{
//***Should have actual logic here
continuationCallback(true);
}
虽然这可能不是你的情况,但我通过调试Prism代码来解决这个问题。我建议你这样做来弄清楚你的问题。删除每个相关项目中对以下内容的引用。
然后从PrismLibrary DeskTop,Silverlight或Phone目录(安装PRISM的位置)添加项目。然后参考这些项目。
答案 2 :(得分:2)
这是你的问题:
bool INavigationAware.IsNavigationTarget(NavigationContext navigationContext) => true;
如果您希望每次拨打RequestNavigate()
时都要创建新视图并将其添加到您的区域,IsNavigationTarget()
必须返回false而不是true。