Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# FreshMVVM在ContentPage和TabbedPage之间切换导航堆栈_C#_Xamarin.forms_Navigation_Freshmvvm - Fatal编程技术网

C# FreshMVVM在ContentPage和TabbedPage之间切换导航堆栈

C# FreshMVVM在ContentPage和TabbedPage之间切换导航堆栈,c#,xamarin.forms,navigation,freshmvvm,C#,Xamarin.forms,Navigation,Freshmvvm,我正在将一个应用程序从非MVVM格式转换为使用FreshMVVM。当应用程序启动时,会有一个登录页面,然后在登录后,会有一个选项卡式页面,其中包含通过每个选项卡式页面上的按钮调用的模式页面 考虑到我所遵循的流程,我认为使用Michael Ridland的流程切换NavigationStacks()是一个完美的选择,但是这些步骤似乎缺少很多重要的说明,并且这些步骤不在GitHub上的示例应用程序中 在我的App.xaml.xs文件中,我有以下代码: public App() {

我正在将一个应用程序从非MVVM格式转换为使用FreshMVVM。当应用程序启动时,会有一个登录页面,然后在登录后,会有一个选项卡式页面,其中包含通过每个选项卡式页面上的按钮调用的模式页面

考虑到我所遵循的流程,我认为使用Michael Ridland的流程切换NavigationStacks()是一个完美的选择,但是这些步骤似乎缺少很多重要的说明,并且这些步骤不在GitHub上的示例应用程序中

在我的
App.xaml.xs
文件中,我有以下代码:

public App()
        {
            InitializeComponent();
            var loginPage = FreshMvvm.FreshPageModelResolver.ResolvePageModel<LoginPageModel>();
            var loginContainer = new STNavigationContainer(loginPage, NavigationContainerNames.AuthenticationContainer);
            var homePageViewContainer = new FreshTabbedNavigationContainer(NavigationContainerNames.MainContainer);

            MainPage = loginContainer;
        }

        public FreshTabbedNavigationContainer(string navigationServiceName)
        {
            NavigationServiceName = navigationServiceName;
            RegisterNavigation();
        }

        protected void RegisterNavigation()
        {
            FreshIOC.Container.Register<IFreshNavigationService>(this, NavigationServiceName)
        }

        public void SwitchOutRootNavigation(string navigationServiceName)
        {
            IFreshNavigationService rootNavigation =
                FreshIOC.Container.Resolve<IFreshNavigationService>(navigationServiceName);
        }
        public void LoadTabbedNav()
        {
            var tabbedNavigation = new FreshTabbedNavigationContainer();
            tabbedNavigation.AddTab<CharactersPageModel>("Characters", "characters.png");
            tabbedNavigation.AddTab<AdventuresPageModel>("Adventures", "adventures.png");
            tabbedNavigation.AddTab<AccountPageModel>("Account", "account.png");
            MainPage = tabbedNavigation;
        }
 public class NavigationContainerNames
    {
        public const string AuthenticationContainer = "AuthenticationContainer";
        public const string MainContainer = "MainContainer";
    }
STNavigationPage:

public class STNavigationPage : NavigationPage
    {
        public STNavigationPage()
        {
                
        }

        public STNavigationPage(Page page) : base(page)
        {
            BarBackgroundColor = Color.FromHex("#2DAFEB");
            BarTextColor = Color.FromHex("#C9371D");
        }
    }
编辑2:重新阅读Github文章,我发现我需要在一个定制的导航服务中完成这项工作,下面是我的更新代码

App.xaml.cs:

公共部分类应用程序:应用程序
{
公共静态帐户=新帐户();
公共应用程序()
{
初始化组件();
FreshIOC.Container.Register();
if(account.Equals(null))
{
LoadSingleNav();
}
其他的
{
LoadTabbedNav();
}
var navPage=new NavigationPage(new LoginPage())
{
BarBackgroundColor=Color.FromHex(“#2DAFEB”),
BarTextColor=Color.FromHex(“#C9371D”)
};
NavigationPage.SetHasNavigationBar(navPage.CurrentPage,false);
主页=导航页面;
主页=登录容器;
}
公共FreshTabbedNavigationContainer(字符串navigationServiceName)
{
NavigationContainerNames=navigationServiceName;
注册活力();
}
受保护的覆盖void OnStart()
{
}
受保护的覆盖void OnSleep()
{
}
受保护的覆盖void OnResume()
{
}
}
CustomNavService.cs:

公共类CustomNavService:NavigationPage,IFreshNavigationService
{
FreshTabbedNavigationContainer_tabbedNavigationPage;
页面_charactersPage、_adventuresPage、_accountPage;
公共CustomNavService(第页):基础(第页)
{
NavigationServiceName=“CustomNavService”;
LoadTabbedNav();
CreateLoginPage();
注册活力();
}
公共字符串导航服务名称{get;private set;}
public void notifyChildrenPageWasppopped()已弹出
{
抛出新的NotImplementedException();
}
公共异步任务弹出窗口(bool model=false,bool animate=true)
{
if(模态)
wait Navigation.PopModalAsync(动画);
其他的
wait Navigation.PopAsync(动画);
}
公共异步任务PoptRoot(bool animate=true)
{
等待导航.PopToRootAsync(动画);
}
公共异步任务推送页面(页面页面,FreshBasePageModel模型,bool model=false,bool animate=true)
{
if(模态)
等待导航。PushModalAsync(页面,动画);
其他的
等待导航.PushAsync(页面,动画);
}
公共任务SwitchSelectedRootPageModel(),其中T:FreshBasePageModel
{
IFreshNavigationService根导航=
FreshIOC.Container.Resolve(NavigationServiceName);
}
public void LoadTabbedNav()
{
_tabbedNavigationPage=新的FreshTabbedNavigationContainer();
_charactersPage=_tabbedNavigationPage.AddTab(“Characters”,“Characters.png”);
_adventuresPage=_tabbedNavigationPage.AddTab(“Adventures”,“Adventures.png”);
_accountPage=_tabbedNavigationPage.AddTab(“Account”,“Account.png”);
此=\选项卡导航页面;
}
私有void CreateLoginPage()
{
var loginPage=FreshPageModelResolver.ResolvePageModel(null);
var loginContainer=new STNavigationContainer(loginPage,CustomNavService.NavigationContainerNames.AuthenticationContainer);
var homePageViewContainer=新的FreshTabbedNavigationContainer(CustomNavService.NavigationContainerNames.MainContainer);
}
受保护的无效注册表激活()
{
FreshIOC.Container.Register(这是NavigationServiceName);
}
公共类NavigationContainerNames
{
public const string AuthenticationContainer=“AuthenticationContainer”;
public const string MainContainer=“MainContainer”;
}
}
我的自定义导航服务中的
SwitchSelectedRootPageModel
任务显示需要返回,我不太清楚
LoadTabbedNav
应该包含哪些内容;示例显示了此.Detail,但显示为无效引用

public class STNavigationPage : NavigationPage
    {
        public STNavigationPage()
        {
                
        }

        public STNavigationPage(Page page) : base(page)
        {
            BarBackgroundColor = Color.FromHex("#2DAFEB");
            BarTextColor = Color.FromHex("#C9371D");
        }
    }