Я надеюсь расширить этот пост здесь { ссылка }
Я не совсем понимаю последовательность событий, которые происходят во время инициализации view и viewmodel при использовании Prism. Дэн объяснил это хорошо, но я все еще что-то упускаю.
Мой сценарий прост: я передаю идентификатор в параметрах навигации, который модель представления будет использовать для поиска некоторых данных из службы, что все делается в методе Initialize. Однако проблема в том, что свойства представления запускаются до вызова метода Initialize, что означает, что у меня еще нет данных для отображения, что создает дополнительную работу для меня.
Дэн предоставил отличное объяснение последовательности событий
- Представление создано (выполняется все в ctor представления)
- Если вы специально добавили свойство ViewModelLocator.AutowireViewModel, это разрешит ViewModel как часть ctor
- Если вы специально не отказались от Autowire ViewModelLocator, служба навигации установит его для вас (после завершения ctor)
- Затем NavigationService вызовет IAutoInitialize / IInitialize / InitializeAsyn c (для Prism 7.2 + ... INavigatingAware.OnNavigatingTo в более старых версиях Prism)
- Затем NavigationService помещает sh страницу в стек навигации (обратите внимание, что это может или может быть невидимым для пользователя, так как дополнительные страницы могут иметь o будет добавлен первым при глубокой связи)
- Затем NavigationService вызовет OnNavigatedFrom / OnNavigatedTo (именно здесь люди часто сообщают о видимой задержке из-за обновлений привязки.
Вот где мне нужна помощь :
Я предполагаю, что шаг 3, где Дэн говорит, что «Служба навигации установит его для вас» означает, что BindingContext представления установлен в это время? Итак, BindingContext устанавливается после ctor, но перед методом Initialize? Это означает, что все свойства, установленные в методе Initialize, всегда будут запускаться дважды, один раз, когда установлена привязка, и снова со свойствами, установленными через Initialize или Autoinitialize?
В моем случае это не идеально, так как все свойства должны быть вызваны в методе Initialize, и я должен обработать все нулевые случаи.
Я действительно не хочу делать все вручную, отказавшись от автопровода, но я не вижу других вариантов, я что-то упустил? Кто-нибудь знает, возможно ли изменить Prism для задержки установки BindingContext до тех пор, пока не будет вызван метод Initialize?
Спасибо.