Xamarin.forms Xamarin Forms Prism模块中的内容页正在初始化三次

Xamarin.forms Xamarin Forms Prism模块中的内容页正在初始化三次,xamarin.forms,prism-6,Xamarin.forms,Prism 6,我正在使用Prism实现Xamarin表单,并在应用程序中实现模块化。我有.Droid项目,默认的PCL项目,它有App.xaml文件和其他内容页。我有4个PCL项目,通过实施IModule创建为模块。模块在App.xaml.cs中配置 我的问题是当应用程序初始化时,默认PCL项目中的登录页、主页加载正确。但是,每次我从同一模块或其他模块的另一个页面使用\u navigationService.NavigateAsync(“”)导航到模块中的任何内容页时,模块中的任何内容页都会初始化三次。内容页

我正在使用Prism实现Xamarin表单,并在应用程序中实现模块化。我有.Droid项目,默认的PCL项目,它有App.xaml文件和其他内容页。我有4个PCL项目,通过实施IModule创建为模块。模块在App.xaml.cs中配置

我的问题是当应用程序初始化时,默认PCL项目中的登录页、主页加载正确。但是,每次我从同一模块或其他模块的另一个页面使用\u navigationService.NavigateAsync(“”)导航到模块中的任何内容页时,模块中的任何内容页都会初始化三次。内容页构造函数与相应的ViewModel构造函数一起被调用了三次,但VM中的OnNavigationCompleted只运行了一次

可能是因为这个问题或其他原因,模块中我的内容页需要再加载几个分数。这在加载时很容易被注意到。模块中内容页的整体导航不太顺畅

有什么解决办法吗?我已经尝试过保留一个空内容 在没有任何控件的模块页面中,结果相同

下面是我的项目的代码片段

Configure Module in app.xaml.cs

    protected override void ConfigureModuleCatalog()
        {
            base.ConfigureModuleCatalog();

            Type module1 = typeof(QNPL.Mobile.Module1);
            Type module2 = typeof(QNPL.Mobile.Module2);
            Type module3 = typeof(QNPL.Mobile.Module3);
            Type module4 = typeof(QNPL.Mobile.Module4);

            ModuleCatalog.AddModule(
              new ModuleInfo()
              {
                  ModuleName = module1.Name,
                  ModuleType = module1,
                  InitializationMode = InitializationMode.OnDemand
              });

            ModuleCatalog.AddModule(
              new ModuleInfo()
              {
                  ModuleName = module2.Name,
                  ModuleType = module2,
                  InitializationMode = InitializationMode.OnDemand
              });

            ModuleCatalog.AddModule(
              new ModuleInfo()
              {
                  ModuleName = module3.Name,
                  ModuleType = module3,
                  InitializationMode = InitializationMode.OnDemand
              });

            ModuleCatalog.AddModule(
              new ModuleInfo()
              {
                  ModuleName = module4.Name,
                  ModuleType = module4,
                  InitializationMode = InitializationMode.OnDemand
              });
        }

private async void MenuItemClick(object value)
{
    if (value != null)
    {
        MenuDetail menuItem = (MenuDetail)value;
        SelectedMenu = menuItem;

        if (!string.IsNullOrEmpty(SelectedMenu.ModuleName))
        {
            _moduleManager.LoadModule(SelectedMenu.ModuleName);
        }

        await _navigationService.NavigateAsync(SelectedMenu.URL, navParams);
    }
}


Module Page:
using Microsoft.Practices.Unity;
using Prism.Modularity;
using Prism.Unity;
using QNPL.Mobile.Module1.API;
using QNPL.Mobile.Module1.Views;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;

[assembly: XamlCompilation(XamlCompilationOptions.Compile)]
namespace QNPL.Mobile.Module1
{
    public class Module1 : IModule
    {
        private readonly IUnityContainer _unityContainer;
        public Module1(IUnityContainer unityContainer)
        {
            _unityContainer = unityContainer;
        }

        public void Initialize()
        {
            _unityContainer.RegisterTypeForNavigation<Module1HomePage>();

            _unityContainer.RegisterPopupNavigationService();

            _unityContainer.RegisterType<IApiInterface, ApiInterface>();
        }
    }
}

Content Page in Module1:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage
    x:Class="QNPL.Mobile.Module1.Views.Module1HomePage"
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:prism="clr-namespace:Prism.Mvvm;assembly=Prism.Forms"
    xmlns:prismBehaviors="clr-namespace:Prism.Behaviors;assembly=Prism.Forms"
    x:Name="Module1HomePage"
    Title="Home Page"
    prism:ViewModelLocator.AutowireViewModel="True">
    <ContentPage.Content>
    </ContentPage.Content>
</ContentPage>


ContentPage .cs file:

using Xamarin.Forms;

namespace QNPL.Mobile.Module1.Views
{
    public partial class Module1HomePage : ContentPage
    {
        public Module1HomePage()
        {
            InitializeComponent();
        }
    }
}
在app.xaml.cs中配置模块
受保护的覆盖无效配置ModuleCatalog()
{
base.ConfigureModuleCatalog();
Type module1=typeof(QNPL.Mobile.module1);
Type module2=typeof(QNPL.Mobile.module2);
Type module3=typeof(QNPL.Mobile.module3);
Type module4=typeof(QNPL.Mobile.module4);
ModuleCatalog.AddModule(
新模块info()
{
ModuleName=module1.Name,
ModuleType=module1,
InitializationMode=InitializationMode.OnDemand
});
ModuleCatalog.AddModule(
新模块info()
{
ModuleName=module2.Name,
ModuleType=module2,
InitializationMode=InitializationMode.OnDemand
});
ModuleCatalog.AddModule(
新模块info()
{
ModuleName=module3.Name,
ModuleType=module3,
InitializationMode=InitializationMode.OnDemand
});
ModuleCatalog.AddModule(
新模块info()
{
ModuleName=module4.Name,
ModuleType=module4,
InitializationMode=InitializationMode.OnDemand
});
}
专用异步void菜单项单击(对象值)
{
if(值!=null)
{
MenuDetail menuItem=(MenuDetail)值;
SelectedMenu=menuItem;
如果(!string.IsNullOrEmpty(SelectedMenu.ModuleName))
{
_moduleManager.LoadModule(SelectedMenu.ModuleName);
}
wait_navigationService.NavigateAsync(SelectedMenu.URL,navParams);
}
}
模块页面:
使用Microsoft.Practices.Unity;
模块化;
使用棱镜。统一;
使用QNPL.Mobile.Module1.API;
使用QNPL.Mobile.Module1.Views;
使用Xamarin.Forms;
使用Xamarin.Forms.Xaml;
[程序集:XamlCompilation(XamlCompilationOptions.Compile)]
命名空间QNPL.Mobile.Module1
{
公共类模块1:IModule
{
私有只读IUnityContainer\u unityContainer;
公共模块1(IUnityContainer unityContainer)
{
_unityContainer=unityContainer;
}
公共无效初始化()
{
_unityContainer.RegisterTypeForNavigation();
_unityContainer.RegisterPopupNavigationService();
_unityContainer.RegisterType();
}
}
}
模块1中的内容页:
ContentPage.cs文件:
使用Xamarin.Forms;
命名空间QNPL.Mobile.Module1.Views
{
公共部分类模块1主页:内容页
{
公共模块1主页()
{
初始化组件();
}
}
}

无论如何,您可以将此信息发布到回购协议中,以查看它吗?没有完整的设置图片,因为我认为缺少一些内容。您使用的是什么prism容器?你为什么用棱镜6?你加入了懒散小组吗?prism开发者和更广泛的社区在这个群体中非常活跃和有帮助。我使用下面的软件包。