WPF Prism подтверждает запрос навигации для нескольких регионов

У меня есть приложение с тремя регионами. Область A - это область навигации для хранения элементов навигации для модулей в приложении. Области B и C являются областями контента для модулей. У меня также есть два модуля Module1 и Module2, каждый из которых имеет элемент управления Navigation Item, загруженный в область A. Область A содержит NavigationItemMod1Control и NavigationItemMod2Control.

NavigationItemMod1Control связан с командой, которая загружает view1B в область B и view1C в область C (NavigationItemMod2Control имеет аналогичную команду). Метод выполнения команды показан ниже:

public void Execute(object parameter)
 {
        // Show View 1B
        var view1BUri = new  Uri(Module1RegionNames.ViewBControl, UriKind.Relative);
        regionManager.RequestNavigate(RegionNames.ViewBArea, view1BUri );

        // Show View 1C
        var view1CUri = new Uri(Module1RegionNames.ViewCControl, UriKind.Relative);
        regionManager.RequestNavigate(RegionNames.ViewCArea, view1CUri );
}

Когда я нажимаю NavigationItemMod2Control, я хочу подтвердить навигацию перед загрузкой либо просмотра 2B, либо просмотра 2C в соответствующих регионах.

Я успешно реализовал IConfirmNavigationRequest на модели представления для View1B в модуле 1, но это только контролирует навигацию для области B. Если пользователь отменяет запрос на навигацию, область B корректно остается как View1B, но View2C загружается в область C.

Любые предложения о том, как подтвердить навигацию один раз для обоих регионов?

1 ответ

Решение

Навигация запроса поставляется с перегрузкой, которая поддерживает обратный вызов:

var navigationParameters = new NavigationParameters();
                    navigationParameters.Add("RelatieId", _CurrentRelatie.RelatieId);
regionManager.RequestNavigate("RelatieDetailRegion",
                        new Uri("RelatieDetail", UriKind.Relative), NavigationCallback, navigationParameters);

void NavigationCallback(NavigationResult nr)
    {
        _logger.Log("NavigationCallback", Category.Info, Priority.Medium);
        if (nr.Result.Value == true)
        {

             //navigate region C, so this is your code
             var view1CUri = new Uri(Module1RegionNames.ViewCControl, UriKind.Relative);
             regionManager.RequestNavigate(RegionNames.ViewCArea, view1CUri );
        }
    }

это основано на моем фрагменте кода, вам придется немного подправить, например, чтобы не использовать параметры навигации, которые вы не используете.

Другие вопросы по тегам