编辑:请在下面查看我的评论-该代码本身似乎是正确的(至少是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实例上导航(除了主窗口)有关,或者与容器和新窗口有关,但是我却无法弄清楚什么。谢谢你们一如既往的协助。
答案 0 :(得分:0)
事实证明,布莱恩·拉古纳斯(Brian Lagunas)拥有一门有关多个shell的课程,我希望能够使用它来完成我所需要的。我会尝试使用它。