Постановка проблемы Я хочу создать пользовательский элемент управления для просмотра контента, имеющий собственную модель представления, которую можно использовать на нескольких страницах контента.
Проблема в нижеприведенной реализации. Я расширил свой App.xaml.cs, как указано ниже.Но как только навигация работает со страницы контента, имеющей пользовательский элемент управления контентом, но если я снова перейду на эту страницу, навигация не будет работать.Просто чтобы добавить к этому, view.Parent также оказывается нулевым в приведенном ниже коде.
Пожалуйста, помогите.
using OEP.Views;
using Prism;
using Prism.Common;
using Prism.Ioc;
using Prism.Mvvm;
using Prism.Navigation;
using Prism.Unity;
using Unity.Resolution;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
[assembly: XamlCompilation(XamlCompilationOptions.Compile)]
namespace OEP
{
public partial class App : PrismApplication
{
public App() : this(null) { }
public App(IPlatformInitializer initializer) : base(initializer) { }
protected override async void OnInitialized()
{
InitializeComponent();
//await NavigationService.NavigateAsync("NewOrderPage");
await NavigationService.NavigateAsync("LoginPage");
//await NavigationService.NavigateAsync("HomePage");
}
protected override void RegisterTypes(IContainerRegistry containerRegistry)
{
containerRegistry.RegisterForNavigation<LoginPage>();
containerRegistry.RegisterForNavigation<ForgotPasswordPage>();
containerRegistry.RegisterForNavigation<HomePage>();
containerRegistry.RegisterForNavigation<CustomerDetailsPage>();
containerRegistry.RegisterForNavigation<NewOrderPage>();
//Container.Resolve<HomePageCustomersUserControl>("Customers");
//containerRegistry.Register<HomePageCustomersUserControl, HomePageCustomersUserControlViewModel>();
//ViewModelLocationProvider.Register<HomePageCustomersUserControl>(() => Container.Resolve<HomePageCustomersUserControlViewModel>());
}
protected override void ConfigureViewModelLocator()
{
ViewModelLocationProvider.SetDefaultViewModelFactory((view, type) =>
{
Page page = null;
switch (view)
{
case Page page1:
page = page1;
break;
case Element customView:
page = GetPageFromElement(customView);
// Existing parameter with the Page
break;
}
var navService = CreateNavigationService(page);
ParameterOverrides overrides = new ParameterOverrides
{
{ "navigationService", navService }
};
return Container.GetContainer().Resolve(type, type.GetType().Name, overrides);
});
}
// Currently exists
protected INavigationService CreateNavigationService(Page page)
{
var navigationService = NavigationService;
((IPageAware)navigationService).Page = page;
return navigationService;
}
protected INavigationService CreateNavigationService(object view)
{
switch (view)
{
case Page page:
return CreateNavigationService(page);
case Element element:
var parentPage = GetPageFromElement(element);
if (parentPage == null)
{
return null;
}
return CreateNavigationService(parentPage);
default:
return null;
}
}
private Page GetPageFromElement(Element view)
{
switch (view.Parent)
{
case Page page:
return page;
case null:
return null;
default:
return GetPageFromElement(view.Parent);
}
}
protected override void OnStart()
{
// Handle when your app starts
}
protected override void OnSleep()
{
// Handle when your app sleeps
}
protected override void OnResume()
{
// Handle when your app resumes
}
}
}