Редактировать: Пожалуйста, смотрите мой комментарий ниже - сам код кажется правильным (по крайней мере, код региона Prism), но навигация в новом экземпляре окна все еще не работает.
Для начала, здесьпроблема у меня ... У меня есть главное окно с панелью меню, которая переключает представления в главном окне, чтобы вывести пользователя на разные экраны.Все это прекрасно работает.
Итак, сегодня я подумал, что добавлю экран «первого пользователя» для обработки всех начальных настроек приложения.Это новое окно, которое откроется, если не были заданы определенные свойства в первый раз, и приветствует нового пользователя, завершит первоначальную настройку и т. Д. Я хотел, чтобы навигация по этому новому окну проходила в новом регионе (просто рядом икнопки «Назад», которые помогают пользователю выполнить настройку).
Я думал, что это будет легко, но после 3 часов барахтания и поиска в самых темных уголках сети я все еще очень растерялся - я также посмотрел на Брайана Лагунаса.Множественные видео в MVVM, но ничего, что я пытался применить, не работает для настройки навигации в новом окне.
Область содержимого для главного окна называется «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>
У меня есть tesзаменив код в команде Navigate в главном окне и заставив его перейти к новым пользовательским элементам управления, показывая их в главном окне, и это работает.
Однако в новом окне они неЯ не могу понять, почему.Я также проверил, правильно ли срабатывает кнопка в модели представления первого пользовательского элемента управления по умолчанию, и это - для справки - вот код команды Navigate:
private void Navigate(string uri)
{
// WriteLine command to test the button firing
Console.WriteLine(uri);
regionManager.RequestNavigate("SetupRegion", uri);
}
Наконец, я разместилПервый взгляд внутри главного окна, и кажется, что он запускается правильно, меняя содержимое в главном окне - я просто не могу заставить его работать или что-то работать в новом окне, независимо от того, как я это пробую.Я предполагаю, что есть кое-что, что я не знаю, что связано либо с навигацией по новым экземплярам окон (кроме главного окна), либо с контейнерами и новыми окнами, но я не смогвыяснить что.Спасибо, ребята, за вашу помощь, как всегда.