C# 使用Prism和Unity在不同模块中切换视图
我想从模块视图导航到模块视图。如何在模块之间实现导航 在我使用Prism框架的应用程序中,我有两个模块C# 使用Prism和Unity在不同模块中切换视图,c#,wpf,unity-container,prism,C#,Wpf,Unity Container,Prism,我想从模块视图导航到模块视图。如何在模块之间实现导航 在我使用Prism框架的应用程序中,我有两个模块 模块a 模块B 我在引导程序中配置了两个模块,如下所示: protected override void ConfigureModuleCatalog() { base.ConfigureModuleCatalog(); ModuleCatalog moduleCatalog = (ModuleCatalog)this.Mo
- 模块a
- 模块B
protected override void ConfigureModuleCatalog()
{
base.ConfigureModuleCatalog();
ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog;
moduleCatalog.AddModule(typeof(ModuleA));
moduleCatalog.AddModule(typeof(ModuleB));
}
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>());
}
}
container.RegisterTypeForNavigation<AccountView>();
我在我的模块a和模块b中注册我的视图,如下所示:
protected override void ConfigureModuleCatalog()
{
base.ConfigureModuleCatalog();
ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog;
moduleCatalog.AddModule(typeof(ModuleA));
moduleCatalog.AddModule(typeof(ModuleB));
}
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>());
}
}
container.RegisterTypeForNavigation<AccountView>();
公共类模块a:IModule
{
专用只读IRegionManager regionManager;
专用只读IUnityContainer容器;
公共StaffModule(IUnityContainer容器、IRegionManager区域管理器)
{
this.container=容器;
this.regionManager=regionManager;
}
公共无效初始化()
{
this.regionManager.RegisterViewWithRegion(“MainRegion”,()=>this.container.Resolve());
}
}
公共类AccountModule:IModule
{
专用只读IRegionManager regionManager;
专用只读IUnityContainer容器;
公共帐户模块(IUnityContainer容器、IRegionManager区域管理器)
{
this.container=容器;
this.regionManager=regionManager;
}
公共无效初始化()
{
container.RegisterType(“AccountView”);
////this.regionManager.RegisterViewWithRegion(“MainRegion”,()=>this.container.Resolve());
}
}
当我从模块a中的StaffView单击按钮时,我想导航到模块b中的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);
}
private void LodeViewfromModule()
{
IUnityContainer unityContainer=ServiceLocator.Current.GetInstance();
var regionManager=unityContainer.Resolve();
var uri=新的uri(“pack://application:,,,/PrismAuto.Account;component/AccountView.xaml“,UriKind.RelativeOrAbsolute);
RequestNavigate(“MainRegion”,uri);
}
但它表明:
对象异常
请任何人帮助我解决此问题。您正在使用以下方式注册导航视图:
container.RegisterType<object, AccountView>("AccountView");
此外,如果您使用的是Prism 6,则Prism.Unity命名空间中有一个扩展方法,用于注册视图以进行导航,如下所示:
protected override void ConfigureModuleCatalog()
{
base.ConfigureModuleCatalog();
ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog;
moduleCatalog.AddModule(typeof(ModuleA));
moduleCatalog.AddModule(typeof(ModuleB));
}
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>());
}
}
container.RegisterTypeForNavigation<AccountView>();
container.RegisterTypeForNavigation();
您正在使用以下方式注册视图以进行导航:
container.RegisterType<object, AccountView>("AccountView");
此外,如果您使用的是Prism 6,则Prism.Unity命名空间中有一个扩展方法,用于注册视图以进行导航,如下所示:
protected override void ConfigureModuleCatalog()
{
base.ConfigureModuleCatalog();
ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog;
moduleCatalog.AddModule(typeof(ModuleA));
moduleCatalog.AddModule(typeof(ModuleB));
}
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>());
}
}
container.RegisterTypeForNavigation<AccountView>();
container.RegisterTypeForNavigation();
您是否尝试导航到新Uri(“AccountView”,UriKind.Relative)?毕竟,您已经在该“名称”下注册了它。您是否尝试导航到新Uri(“AccountView”,UriKind.Relative)
?毕竟你是用这个“名字”注册的。非常感谢你的回答。非常感谢你的回答。