2

我无法使用 Prism 4 进行导航。

我已经设置了一个测试解决方案,其中我有一个带有一个名为的区域的外壳MainRegion

<Window x:Class="PrismNavigationTest.ShellView"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:prism="http://www.codeplex.com/prism"
        Title="ShellView" Height="350" Width="525">
    <Grid>
        <ContentControl prism:RegionManager.RegionName="MainRegion"/>
    </Grid>
</Window>

接下来我有一个引导程序,它将Module位于不同项目中的 a 添加到我的modulecatalog

protected override void ConfigureModuleCatalog()
{
    Type module = typeof(Module.ModuleInit);
    ModuleCatalog.AddModule(new ModuleInfo("Module", module.AssemblyQualifiedName));

    base.ConfigureModuleCatalog();
}

ModuleInit类的 Initialize 方法中,我试图更改mainregion.

public class ModuleInit : IModule
{
    private IUnityContainer container;
    private IRegionManager regionManager;

    public ModuleInit(IUnityContainer container, IRegionManager regionManager)
    {
        this.container = container;
        this.regionManager = regionManager;
    }

    public void Initialize()
    {
        // TODO This works
        //regionManager.RegisterViewWithRegion("MainRegion", () => container.Resolve<View>());

        // TODO This doesn't work
        container.RegisterType<object, View>("View1");
        regionManager.Regions["MainRegion"].RequestNavigate(new Uri("View1", UriKind.Relative));
    }
}

使用视图发现有效,但视图注入无效。

4

2 回答 2

0

更改以下行;

regionManager.RequestNavigate("MainRegion", "View1");

对此;

var view1 = new Uri("View1", UriKind.Relative);
regionManager.RequestNavigate("MainRegion", view1);

此外,似乎还有另一个问题,您() => container.Resolve<View>()在显示视图时调用RegisterViewWithRegion. 然后似乎您已经注册了该视图。但是在“不工作”部分,您正在View重新注册。

于 2013-02-01T14:20:02.373 回答
0

问题出在我的Bootstrapper.

InitializeShell我使用以下代码从容器中解析 Shell 的方法中:

Application.Current.MainWindow = (Window)ServiceLocator.Current.GetInstance<Shell>();

我将其更改为使用已经初始化的 shell:

Application.Current.MainWindow = (Window)this.Shell;

我对此仍然有些困惑,但我认为这与统一创建新对象有关,而不是在解析时默认为单例。

于 2013-02-04T13:18:30.087 回答