棱镜导航在新窗口中不起作用

时间:2018-10-13 05:58:13

标签: c# wpf mvvm prism

编辑:请在下面查看我的评论-该代码本身似乎是正确的(至少是Prism区域代码),但是在新窗口实例中的导航仍然无法正常工作。

首先,这是我遇到的问题... 我有一个带有菜单栏的主窗口,该菜单栏可切换主窗口中的视图以将用户带到不同的屏幕。一切都很好。

所以我今天想,我将添加一个“首次用户”屏幕来处理该应用程序的所有初始设置。如果尚未设置某些首次属性并欢迎新用户,完成初始设置等,这将是一个新窗口。我想在新区域的新窗口中导航(仅下一个和后退按钮可以引导用户完成设置。

我认为这很容易,但是经过3个小时的苦苦挣扎并搜索了网络上最黑暗的角落后,我仍然感到非常困惑-我也看了Brian Lagunas的MVVM上的Pluralsight视频,但没有尝试应用在新窗口上设置导航。

主窗口的内容区域名为“ ContentRegion”,新窗口的内容区域名为“ SetupRegion”。

所有视图都在引导程序中注册,如下所示:

        // All views must be registered.
        Container.RegisterTypeForNavigation<Home>( "Home" );
        Container.RegisterTypeForNavigation<Index>( "Index" );
        Container.RegisterTypeForNavigation<Settings>( "Settings" );
        Container.RegisterTypeForNavigation<FirstTimeSetupWelcomeScreen>( "WelcomeScreen" );
        Container.RegisterTypeForNavigation<FirstTimeSetupScreen2>( "FirstTimeSetupScreen2" );

这是从主窗口当前实例化新窗口的方式:

    public MainWindowViewModel(IRegionManager _regionManager, EventAggregator _eventAggregator)
    {
        eventAggregator = _eventAggregator;
        regionManager = _regionManager;

        NavigateCommand = new DelegateCommand<string>(Navigate);

        // Set the default view to the home screen
        regionManager.RegisterViewWithRegion("ContentRegion", typeof(FirstTimeSetupWelcomeScreen));

        // Check to see if program is in first time run or not
        if ((ConfigurationManager.GetSection("SaveLocationsGroup/Locations") as IndexLocationsSection).SaveLocation.Location == "")
        {           
            var firstTimeWindow = new FirstTime();

            firstTimeWindow.Show();

            // Set the default view to the welcome screen on new window
            regionManager.RegisterViewWithRegion("SetupRegion", typeof(FirstTimeSetupWelcomeScreen));
        }
    }

在新窗口的XAML中,内容控件的设置如下:

<Grid>
    <ContentControl prism:RegionManager.RegionName="SetupRegion" />
</Grid>

我已经通过替换主窗口中“导航”命令中的代码,并使其导航到新的用户控件,并在主窗口中显示它们的方法进行了测试。

但是,在新窗口中它们不是,而且我似乎无法弄清楚原因。我还测试了第一个/默认用户控件视图模型中的按钮是否正确触发,它是-供参考,这里是Navigate命令代码:

    private void Navigate(string uri)
    {
        // WriteLine command to test the button firing
        Console.WriteLine(uri);
        regionManager.RequestNavigate("SetupRegion", uri);
    }

最后,我将第一个视图放置在主窗口中,并且似乎可以正确触发,更改了主窗口中的内容-我只是无法使其正常工作或在新窗口中无法正常工作,没有不管我如何尝试。我假设有一些我不知道的东西与在新的Windows实例上导航(除了主窗口)有关,或者与容器和新窗口有关,但是我却无法弄清楚什么。谢谢你们一如既往的协助。

1 个答案:

答案 0 :(得分:0)

事实证明,布莱恩·拉古纳斯(Brian Lagunas)拥有一门有关多个shell的课程,我希望能够使用它来完成我所需要的。我会尝试使用它。