Prism RequestNavigate不起作用

时间:2011-05-08 02:56:38

标签: wpf prism

在每个视图中

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));

我正在关注开发者指南,如果视图存在,它不会更改视图。

3 个答案:

答案 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代码来解决这个问题。我建议你这样做来弄清楚你的问题。删除每个相关项目中对以下内容的引用。

  • Microsoft.Practices.Prism
  • Microsoft.Practices.Prism.Interactivity
  • Microsoft.Practices.Prism.MefExtensions
  • Microsoft.Practices.Prism.UnityExtensions

然后从PrismLibrary DeskTop,Silverlight或Phone目录(安装PRISM的位置)添加项目。然后参考这些项目。

答案 2 :(得分:2)

这是你的问题:

bool INavigationAware.IsNavigationTarget(NavigationContext navigationContext) => true;

如果您希望每次拨打RequestNavigate()时都要创建新视图并将其添加到您的区域,IsNavigationTarget()必须返回false而不是true。