Prism RequestNavigate不起作用

问题描述 投票:7回答:3

在每个视图中

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

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

wpf prism
3个回答
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
    }
);

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
投票

这是你的问题:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.