【问题标题】:Switch View in different Modules using Prism and Unity使用 Prism 和 Unity 在不同模块中切换视图
【发布时间】:2016-01-21 01:43:53
【问题描述】:

我想从 ModuleA 视图 导航到 ModuleB 视图。如何实现模块之间的导航?

在我使用 Prism 框架的应用程序中,我有两个模块

  • 模块A
  • 模块B

我在我的引导程序中配置两个模块,如下所示:

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

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

我在 ModuleAModuleB 中注册我的两个 Views,如下所示:

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 时,我想导航到 中的 AccountView模块 B。这是我的导航代码。

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

请任何人帮我解决这个问题。

【问题讨论】:

  • 您是否尝试导航到new Uri("AccountView", UriKind.Relative)?毕竟你已经用那个“名字”注册了它。

标签: c# wpf unity-container prism


【解决方案1】:

您正在使用以下方式注册导航视图:

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

【讨论】:

  • 非常感谢您的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 2011-01-02
  • 1970-01-01
  • 2012-05-20
  • 1970-01-01
相关资源
最近更新 更多