簡體   English   中英

使用Prism和Unity在不同的模塊中切換視圖

[英]Switch View in different Modules using Prism and Unity

我想從ModuleA視圖導航到ModuleB視圖 如何實現模塊之間的導航?

在使用Prism框架的應用程序中,我有兩個模塊

  • ModuleA
  • ModuleB

我在Bootstrapper中配置兩個模塊,如下所示:

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

當我從ModuleA中的 StaffView中單擊Button時 ,我想導航至ModuleB中的 AccountView 這是我的導航代碼。

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異常。

請任何人幫助我解決這個問題。

您正在使用以下方法注冊視圖以進行導航:

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

另外,如果您使用的是Prism 6,則在Prism.Unity命名空間中有一個擴展方法,用於注冊視圖,如下所示:

container.RegisterTypeForNavigation<AccountView>();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM