Job*_*mes 0 c# wpf prism unity-container
我想从ModuleA视图导航到ModuleB视图。如何实现模块之间的导航?
在使用Prism框架的应用程序中,我有两个模块
我在Bootstrapper中配置两个模块,如下所示:
protected override void ConfigureModuleCatalog()
{
base.ConfigureModuleCatalog();
ModuleCatalog moduleCatalog = (ModuleCatalog)this.ModuleCatalog;
moduleCatalog.AddModule(typeof(ModuleA));
moduleCatalog.AddModule(typeof(ModuleB));
}
Run Code Online (Sandbox Code Playgroud)
我像这样在我的ModuleA和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>());
}
}
Run Code Online (Sandbox Code Playgroud)
当我点击按钮从StaffView在ModuleA,我想转到AccountView在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);
}
Run Code Online (Sandbox Code Playgroud)
但它显示:
System.Object异常。
请任何人帮助我解决这个问题。
您正在使用以下方法注册视图以进行导航:
container.RegisterType<object, AccountView>("AccountView");
Run Code Online (Sandbox Code Playgroud)
并像这样导航到它:
var uri = new Uri("pack://application:,,,/PrismAuto.Account;component/AccountView.xaml", UriKind.RelativeOrAbsolute);
regionManager.RequestNavigate("MainRegion", uri);
错了 您需要使用注册时提供的密钥来导航到它:
regionManager.RequestNavigate("MainRegion", "AccountView");
Run Code Online (Sandbox Code Playgroud)
另外,如果您使用的是Prism 6,则在Prism.Unity命名空间中有一个扩展方法,用于注册视图,如下所示:
container.RegisterTypeForNavigation<AccountView>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1109 次 |
| 最近记录: |