Призма навигации не работает в новом окне - PullRequest
0 голосов
/ 13 октября 2018

Редактировать: Пожалуйста, смотрите мой комментарий ниже - сам код кажется правильным (по крайней мере, код региона 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);
    }

Наконец, я разместилПервый взгляд внутри главного окна, и кажется, что он запускается правильно, меняя содержимое в главном окне - я просто не могу заставить его работать или что-то работать в новом окне, независимо от того, как я это пробую.Я предполагаю, что есть кое-что, что я не знаю, что связано либо с навигацией по новым экземплярам окон (кроме главного окна), либо с контейнерами и новыми окнами, но я не смогвыяснить что.Спасибо, ребята, за вашу помощь, как всегда.

1 Ответ

0 голосов
/ 13 октября 2018

Оказывается, у Брайана Лагунаса есть курс по нескольким оболочкам, который, я надеюсь, я смогу использовать для достижения того, что мне нужно.Я попытаюсь использовать это.

...