2016-01-20 79 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

非常感謝您的回答。 –