2016-01-20 66 views
0

我想从导航ModuleA View to ModuleB View。我怎样才能实现模块之间的导航?使用棱镜和Unity在不同模块中切换视图

在我的应用程序,它使用棱镜框架,我有两个模块

  • ModuleA
  • ModuleB

我配置我的引导程序两个模块是这样的:

protected override void ConfigureModuleCatalog() 
     { 
      base.ConfigureModuleCatalog(); 

      ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog; 
      moduleCatalog.AddModule(typeof(ModuleA)); 
      moduleCatalog.AddModule(typeof(ModuleB)); 
     } 

注册我在我的ModuleAModuleB浏览这样的:

public class ModuleA : IModule 
    { 

     private readonly IRegionManager regionManager; 
     private readonly IUnityContainer container; 

     public StaffModule(IUnityContainer container, IRegionManager regionManager) 
     { 
      this.container  = container; 
      this.regionManager = regionManager; 
     } 

     public void Initialize() 
     { 
      this.regionManager.RegisterViewWithRegion("MainRegion",() => this.container.Resolve<StaffView>()); 
     }   
    } 


public class AccountModule : IModule 
    { 
     private readonly IRegionManager regionManager; 
     private readonly IUnityContainer container; 

     public AccountModule(IUnityContainer container, IRegionManager regionManager) 
     { 
      this.container  = container; 
      this.regionManager = regionManager; 
     } 

     public void Initialize() 
     { 
      container.RegisterType<object, AccountView>("AccountView"); 
      ////this.regionManager.RegisterViewWithRegion("MainRegion",() => this.container.Resolve<AccountView>()); 
     } 
    } 

当我点击按钮StaffViewModuleA,我想转到AccountView in ModuleB。这是我的导航代码。

private void LodeViewfromModule() 
{ 
    IUnityContainer unityContainer = ServiceLocator.Current.GetInstance<IUnityContainer>(); 
    var regionManager=unityContainer.Resolve<IRegionManager>(); 
    var uri = new Uri("pack://application:,,,/PrismAuto.Account;component/AccountView.xaml", UriKind.RelativeOrAbsolute); 
    regionManager.RequestNavigate("MainRegion", uri); 
} 

但它显示:

System.Object的例外。

请大家帮我解决这个问题。

+0

您是否尝试导航到'新的Uri(“AccountView”,UriKind.Relative)'?毕竟,你已经在这个“名字”下注册了它。 – Haukinger

回答

4

您注册使用您的导航视图:

container.RegisterType<object, AccountView>("AccountView"); 

,并引导到这个地方,如:

var uri = new Uri("pack://application:,,,/PrismAuto.Account;component/AccountView.xaml", UriKind.RelativeOrAbsolute); regionManager.RequestNavigate("MainRegion", uri);

这是不对的。您需要使用您注册时它进行导航提供的键导航到它:

regionManager.RequestNavigate("MainRegion", "AccountView"); 

此外,如果您使用的棱镜6没有在Prism.Unity命名空间扩展的方法来注册你的意见导航像这样:

container.RegisterTypeForNavigation<AccountView>(); 
+0

非常感谢您的回答。 –