2011-05-08 101 views
7

在每个视图棱镜RequestNavigate不起作用

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

你不应该注册你的类型对基本接口,而不是'对象'类型? – 2011-05-08 09:53:04

+2

在开发者指南中,它用这种方式写,我不知道哪个基础接口,你的意思是IModule? – viewer20q 2011-05-09 11:54:34

+0

你指的是哪个开发人员指南? – 2011-05-09 13:54:17

回答

9

您确定视图被容器填充了吗?

我建议你提供的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

7年过去了,我在想我们可以高兴地回答这个问题。很简单,并帮助我轻松解决问题,然后我想我是谁回答它的人... – Shimmy 2018-03-04 11:08:47

2

我已经看到了,如果我实现IConfirmNavigateRequest和不要调用continutationCallback(true),导航会悄然失败。

public void ConfirmNavigationRequest(NavigationContext navigationContext, Action<bool> continuationCallback) 
    { 
     //***Should have actual logic here 
     continuationCallback(true); 
    } 

虽然这可能不是你的情况,我想通了这一点通过棱镜代码调试。我建议你这样做来解决你的问题。删除每个相关项目中对以下内容的引用。

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

然后添加来自PrismLibrary DeskTop,Silverlight或Phone目录(您安装PRISM的地方)的项目。然后参考这些项目。如果你想创建一个新的观点,并在每次调用RequestNavigate()时添加到您所在的地区,IsNavigationTarget()必须返回false,而不是真正的

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

+0

谢谢!那正是我的问题,我曾经在一个小时内浪费了我的时间。 – Golvellius 2013-04-30 09:51:33