Как передать INavigationService из родительской ContentPage ViewModel в дочернюю ContentView ViewModel?

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

2 ответа

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

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

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

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

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

Другие вопросы по тегам