2016-11-28 7 views
0

Я использую Xamarin Forms и Prism. Моя навигация между страницами осуществляется с помощью Prism INavigationService. У меня есть Xamarin Forms ContentPage со многими дочерними ContentView, у которых есть свои собственные модели просмотра. Когда я нажимаю дочерний ContentView, я хотел бы перейти к другому ContentPage с некоторыми свойствами из дочернего ContentView. Я хочу знать, можно ли передать родительскую модель представления InavigationService в модель представления Child ContentView? Или Есть ли другие лучшие практики, которые могут быть использованы в соответствии с моими требованиями?Как пройти INavigationService от родителя ContentPage ViewModel для дочернего ContentView ViewModel?

ответ

0

Что вам нужно сделать, это зарегистрировать страницу в вашем prismApplcation, который useually ваш App.xaml После регистрации страницы с помощью RegisterForNavigation < страницу>, то вы можете вводить INavigationService в конструкторе страницы как это

private INavigationService _navigationService; 
public MyPage(INavigationService navigationService) 
{ 
    _navigationService = navigationService 
} 

Alternativly вы можете сделать то же самое (что рекомендуется) в ViewModel страницы, но вы должны убедиться, чтобы включить Autolocater в файле Xaml страницы.

Это тот случай, если вы хотите перемещаться между страницами контента. Тем не менее, в вашем случае у вас есть несколько просмотров, и у каждого представления есть своя собственная модель просмотра, хотя это своего рода нарушение правил, поскольку представления могут в основном обмениваться viewmodel со своей страницы, но если вы настаиваете на ее использовании таким образом, мой единственный совет , не глядя на ваш код, заключается в регистрации режимов просмотра для каждого представления, используя тот же контейнер, с которого вы зарегистрировали страницу. Используйте RegisterType <>() для этого, и вы обнаружите, что Inavigationservice будет введена. Еще раз я думаю, что лучше изменить дизайн кода.

+0

Hi BraveHeart, Спасибо за ответ. Регистрация возможна только для ContentPages, а не для ContentViews. Мои дочерние объекты имеют тип ContentView. Поэтому регистрация не будет работать. –

0

На данный момент единственным обходным решением, которое работает для меня, является то, что я отключил автоматическую проводку для моделей детского просмотра. И у меня есть все мои модели просмотра моего ребенка как переменные-члены в моей модели просмотра страницы содержимого и привязывают их к представлениям в XAML. Сейчас он работает. Я не уверен, что это лучшая практика. Если кто-то найдет лучшее решение, пожалуйста, дайте мне знать.