Я использую Xamarin Forms и Prism. Моя навигация между страницами осуществляется с помощью Prism INavigationService. У меня есть Xamarin Forms ContentPage со многими дочерними ContentView, у которых есть свои собственные модели просмотра. Когда я нажимаю дочерний ContentView, я хотел бы перейти к другому ContentPage с некоторыми свойствами из дочернего ContentView. Я хочу знать, можно ли передать родительскую модель представления InavigationService в модель представления Child ContentView? Или Есть ли другие лучшие практики, которые могут быть использованы в соответствии с моими требованиями?Как пройти INavigationService от родителя ContentPage ViewModel для дочернего ContentView ViewModel?
Как пройти INavigationService от родителя ContentPage ViewModel для дочернего ContentView ViewModel?
ответ
Что вам нужно сделать, это зарегистрировать страницу в вашем prismApplcation, который useually ваш App.xaml После регистрации страницы с помощью RegisterForNavigation < страницу>, то вы можете вводить INavigationService в конструкторе страницы как это
private INavigationService _navigationService;
public MyPage(INavigationService navigationService)
{
_navigationService = navigationService
}
Alternativly вы можете сделать то же самое (что рекомендуется) в ViewModel страницы, но вы должны убедиться, чтобы включить Autolocater в файле Xaml страницы.
Это тот случай, если вы хотите перемещаться между страницами контента. Тем не менее, в вашем случае у вас есть несколько просмотров, и у каждого представления есть своя собственная модель просмотра, хотя это своего рода нарушение правил, поскольку представления могут в основном обмениваться viewmodel со своей страницы, но если вы настаиваете на ее использовании таким образом, мой единственный совет , не глядя на ваш код, заключается в регистрации режимов просмотра для каждого представления, используя тот же контейнер, с которого вы зарегистрировали страницу. Используйте RegisterType <>() для этого, и вы обнаружите, что Inavigationservice будет введена. Еще раз я думаю, что лучше изменить дизайн кода.
На данный момент единственным обходным решением, которое работает для меня, является то, что я отключил автоматическую проводку для моделей детского просмотра. И у меня есть все мои модели просмотра моего ребенка как переменные-члены в моей модели просмотра страницы содержимого и привязывают их к представлениям в XAML. Сейчас он работает. Я не уверен, что это лучшая практика. Если кто-то найдет лучшее решение, пожалуйста, дайте мне знать.
Hi BraveHeart, Спасибо за ответ. Регистрация возможна только для ContentPages, а не для ContentViews. Мои дочерние объекты имеют тип ContentView. Поэтому регистрация не будет работать. –