Prism. OnNavigationTo не срабатывает, когда я показываю свой вид с помощью RegisterViewWithRegion - PullRequest
5 голосов
/ 08 августа 2011

У меня небольшая проблема с методом OnNavigatedTo в интерфейсе INavigationAware.

Когда я показываю свой вид с помощью RegionManager.RequestNavigate(myRegionName, myViewName),
, вызывается метод OnNavigationTo.

Но когда я использую RegionManager.RegisterViewWithRegion(myRegionName, typeof(myView))
, я не могу получить этот сценарий, и после этого я вызываю RegionManager.RequestNavigate(myRegionName, myViewName2) для моего второго представления, у меня есть вызов метода OnNavigatedFrom моего первого представления.

Мой вопрос:
Почему метод OnNavigatedTo не вызывается и как я могу получить уведомление о просмотре, когда я использую RegisterViewWithRegion?

Ответы [ 2 ]

2 голосов
/ 03 апреля 2012

При регистрации с помощью диспетчера регионов будет отображен первый вид, который был зарегистрирован в нем.Он никогда не будет вызывать OnNavigatedTo.По сути, чтобы заставить его делать то, что вы хотите, вам нужно «перейти» к вашему первому представлению без вызова OnNavigatedFrom.Для этого:

// Register all your views into the region
// The first View that is registered is automatically activated
regionManager.Regions["myRegionName"].Add(myView);
regionManager.Regions["myRegionName"].Add(myView2);

// Deactivate the View so it doesn't show in the UI
regionManager.Regions["myRegionName"].Deactivate(regionManager.Regions["myRegionName"].ActiveViews.First());

// Now navigate to your first screen
regionManager.RequestNavigate("myRegionName", "myView");

OnNavigatedTo должен вызываться один раз, а OnNavigatedFrom вызываться только после запроса перехода к другому представлению.

0 голосов
/ 24 февраля 2014

Чтобы разрешить навигацию просмотра, вы должны зарегистрировать его как объект, попробуйте что-то вроде этого:

_container.RegisterType<Object, MainView>("MainView", new TransientLifetimeManager());
_regionManager.RegisterViewWithRegion("MainRegion", () => _container.Resolve<MainView>());

первая строка позволяет просматривать навигацию, а вторая автоматически разрешает вид при создании региона

...