INavigatingAware.OnNavigatingTo был впервые представлен в Prism, чтобы помочь разработчикам выполнять логику инициализации, аналогичную ViewWillAppear
.
Чтобы лучше визуализировать это, события выглядят примерно так в NavigationService:
- Создать страницу
- Установить свойство ViewModelLocator.Autowire, если оно равно нулю
- Применение любого поведения из PageBehaviorFactory
- Вызовите IConfirmNavigation.CanNavigate (и его асинхронный аналог) на Page / ViewModel, от которой мы уходим от
- Вызов INavigatingAware.OnNavigatingTo
- Вставить страницу в стек NavigationStack
- Call INavigatedAware.OnNavigated {From | To}
BREAKING CHANGE
Теперь, несмотря на все вышесказанное, мы получили огромное количество отзывов о INavigatingAware (суть этого вопроса), в результате чего подавляющая обратная связь от сообщества Prism INavigatingAware была сильно устаревшей в Prism 7.2. Это означает, что он был удален из INavigationAware и выдаст ошибку времени компиляции, если вы непосредственно реализуете его. Для тех случаев, когда вы получили его бесплатно от INavigationAware, он просто не будет вызываться. Продвигаясь вперед, мы ввели ряд интерфейсов, чтобы сделать это проще и более самодокументируемым в отношении намерений.
Новые интерфейсы и API
- IInitialize.Initialize
- IInitializeAsync.InitializeAsync
- IAutoInitialize
Новый интерфейс IInitialize является прямой заменой INavigatingAware. Мы давно получаем отзывы о том, что людям нужна возможность выполнять асинхронные задачи во время инициализации. Проблема здесь заключается в том, что это может вызвать очень заметную задержку навигации, аналогичную IConfirmNavigationAsync. Если вы используете какой-либо из этих асинхронных интерфейсов, вам нужно обязательно включить какое-либо наложение занятости / загрузки на экране.
Наконец самое интересное ... IAutoInitialize - это просто интерфейс маркера. Если установлен ваш ViewModel, он автоматически попытается установить любые свойства в ViewModel на основе того, что содержится в NavigationParameters. Это без учета регистра, и есть дополнительный атрибут, который вы можете пометить в ваших свойствах в случае, если ваше имя свойства будет похоже на Model
и ваше имя параметра будет monkey