В чем разница между активацией региона и RequestNavigate региона?

Я использую один регион с 2 представлениями. У меня есть ComboBox, который позволяет пользователю выбирать вид в регионе.

У меня есть 2 вопроса:

Первый вопрос: в чем разница между:

_regionManager.Regions.Add("MyRegion")
_regionManager.Regions["MyRegion"].Add(container.Resolve<OneView>())
_regionManager.Regions["MyRegion"].Add(container.Resolve<SecondView>())

To:

_regionManager.RegisterViewWithRegion("MyRegion", () => container.Resolve<OneView>());
_regionManager.RegisterViewWithRegion("MyRegion", () => container.Resolve<SecondView>());

и мой второй вопрос, в чем разница между:

_regionManager.Regions["MyRegion"].ActiveViews.ForEach(view => _region.Deactivate(view));
_regionManager.Regions["MyRegion"].Activate(container.Resolve<SecondView>());

To:

_regionManager.Regions["MyRegion"].RequestNavigate(new Uri("SecondView", UriKind.Relative));

Заранее спасибо.


person user436862    schedule 18.02.2014    source источник


Ответы (1)


Разница в первом сравнении, о котором вы упомянули, заключается в том, что метод RegisterViewWithRegion() активирует зарегистрированный View в конце процесса, в то время как первая реализация добавляет только представления. Этот подход RegisterViewWithRegion() называется Обнаружение просмотра. Вы можете найти соответствующий ответ в следующем посте, сделанном вами вчера:

Полезная информация по Руководству MSDN Prism:

Для второго сравнения это будет зависеть от типа Region. Реализация First оставила бы активным только SecondView. Однако RequestNavigate() может не деактивировать предыдущее представление, если Region является Тип ItemsControl. Регион ItemsControl позволяет добавлять множество представлений, поэтому у вас может быть более одного активного представления.

В этом случае SecondView появится под ранее активным View в Region. Но если вы не хотите такого поведения, у вас есть 2 варианта:

  1. Сделайте тип Region типом ContentControl, чтобы одновременно отображалось только одно представление;
  2. Деактивируйте предыдущий View в методе OnNavigatedFrom(). Вам нужно будет сделать предыдущий View наследником INavigationAware.

Полезная информация о RequestNavigate() и Navigation в руководстве MSDN Prism:

Я надеюсь, что это поможет, С уважением.

person GOstrowsky    schedule 18.02.2014