Xamarin.forms FreshMVVM—从不带';t从FreshBasePageModel继承

Xamarin.forms FreshMVVM—从不带';t从FreshBasePageModel继承,xamarin.forms,freshmvvm,Xamarin.forms,Freshmvvm,下面的代码显示了OpenPage命令的两个示例。MainPageModel中的一个可以工作,因为它直接来自FreshBasePageModel。但是,ChildPageModel中的第二个OpenPage调用将无法工作(或编译)。我不想到处传递父模型。那么,如何使用FreshMVVM从ChildPageModel打开一个新页面(并让后退按钮工作,等等) 公共类MainPageModel:FreshBasePageModel { 公共命令OpenPage { 得到 { 返回新命令(()=> { c

下面的代码显示了OpenPage
命令的两个示例。
MainPageModel
中的一个可以工作,因为它直接来自
FreshBasePageModel
。但是,
ChildPageModel
中的第二个OpenPage调用将无法工作(或编译)。我不想到处传递父模型。那么,如何使用FreshMVVM从
ChildPageModel
打开一个新页面(并让后退按钮工作,等等)

公共类MainPageModel:FreshBasePageModel
{
公共命令OpenPage
{
得到
{
返回新命令(()=>
{
corethods.PushPageModel();
});
}
}
公共ChildPageModel ChildPageModel{get;set;}
}
公共类子页面模型
{
公共命令OpenPage
{
得到
{
返回新命令(()=>
{
// ??????
corethods.PushPageModel();
});
}
}
}

还应使ChildPageModel继承自FreshBasePageModel。所有页面模型都应该继承自FreshBasePageModel

我用三个页面(主页、第二页、第三页)做了一个简单的示例。您可以从HitHub下载FreshMVVMDemo文件夹的源文件。

如果要打开新页面,可以在子页面中添加命令

#region Commands
    public Command GotoPageCommand
    {
        get
        {
            return new Command(async () =>
            {
                await CoreMethods.PushPageModel<ThirdPageModel>(); //replace the ThirdPageModel with the page you want to open
            });
        }
    }
    #endregion
#区域命令
公共命令GotoPageCommand
{
得到
{
返回新命令(异步()=>
{
wait CoreMethods.PushPageModel();//将第三个管理模型替换为要打开的页面
});
}
}
#端区
如果要返回,请添加如下命令

 #region Commands
    public Command GoBackSecondCommand
    {
        get
        {
            return new Command(async () =>
            {
                //await CoreMethods.PopPageModel();  //go back to main page
                await CoreMethods.PushPageModel<SecondPageModel>(); //Go back to third page
            });
        }
    }
    #endregion
#区域命令
公共命令GoBackSecondCommand
{
得到
{
返回新命令(异步()=>
{
//等待CoreMethods.PopPageModel();//返回主页
等待CoreMethods.PushPageModel();//返回第三页
});
}
}
#端区

以下代码将完成此操作

var page = FreshPageModelResolver.ResolvePageModel<MainPageModel>();
var model = page.GetModel() as MainPageModel;
var navService = FreshMvvm.FreshIOC.Container.Resolve<IFreshNavigationService>();
await navService.PushPage(page, null);
var page=FreshPageModelResolver.ResolvePageModel();
var model=page.GetModel()作为MainPageModel;
var navService=FreshMvvm.FreshIOC.Container.Resolve();
等待navService.PushPage(第页,空);

谢谢您的回答。您的示例有3个页面,所有页面都继承自FreshBasePageModel。我实际上是在问如何从页面模型的子级导航到页面,而该子级不是从FreshBasePageModel继承的。这是上面一个简单的例子,用来强调我正在努力实现的目标。我有一个合理的理由以这种方式构造代码。@JohnLivermore FreshBasePageModel是FreshMVVM NuGet包的基类。如果要使用FreshMVVM,首先需要继承FreshBasePageModel。谢谢。我了解如何使用FreshMVVM。那不是我的问题。如果您有一个复杂的页面,并且希望将其分解为离散的ContentView(我的情况),并且有与这些ContentView匹配的模型,并且是主FreshBasePageModel之外的属性(如上所述),那么有时您需要从这些子模型中导航到一个新页面。从FreshBasePageModel扩展这些视图将不起作用,因为没有上下文来设置它(您不能“导航”到这些子视图)。我只是想知道如何解决一些可以调用新页面并保持FreshMVVM同步的问题。我们无法做到这一点,我们希望通过异步保持FreshMVVM导航到的所有子页面都应该继承此基本模型。
var page = FreshPageModelResolver.ResolvePageModel<MainPageModel>();
var model = page.GetModel() as MainPageModel;
var navService = FreshMvvm.FreshIOC.Container.Resolve<IFreshNavigationService>();
await navService.PushPage(page, null);