MvvmCross.Exceptions.MvxException:无法替换MainPage root?

时间:2018-04-18 12:42:19

标签: c# android xamarin.forms mvvmcross

我在哪里可以为MasterDetailPageXamarin Forms找到一个好的示例MvvmCross。 当我的项目发出此错误时:

  

MvvmCross.Exceptions.MvxException:无法替换MainPage root?

看看我的代码: source

2 个答案:

答案 0 :(得分:2)

从MvvCross v6.1.2开始,该问题仍然存在,但通常不会将其指定为“ bug”(因此,不确定在下一发行版中是否将以任何方式更改它)。 / p>

关于收到此异常情况的信息显然太少了,但原因之一可能是您可能没有为“母版(菜单)”页面定义“标题”值在xaml中。

    Title="Never seen and never used title which still throws the exception"

据我所知,MvvmCross具有引发该异常的一些内部逻辑,因为定义菜单页面意味着(显式)创建MasterDetails包装器页面,该页面需要获得一些标题,但是,该标题仍不被视为使用“详细信息”页面的标题。


以防万一,在此处添加一些使用MvvmCross组织MasterDetails页面流的路线图

MasterDetails页面必须包含两个部分:

菜单(最初是MasterPage,即包装在MasterDetails页面中的某些布局):

[MvxMasterDetailPagePresentation(Position = MasterDetailPosition.Master, 
    WrapInNavigationPage = false, NoHistory = true)]
public partial class HomeMasterDetailMenuPage : MvxContentPage<HomeMasterDetailMenuViewModel>

实际上是内容页面:

[MvxMasterDetailPagePresentation(Position = MasterDetailPosition.Detail, 
    WrapInNavigationPage = true, NoHistory = true)]
public partial class HomeMasterDetailRootPage : MvxContentPage<HomeMasterDetailRootViewModel>

Xaml(设计)文件具有任何常规MvvmCross XF Content页面都具有的定义(同样,请不要忘记为Menu页面定义添加Title属性)。< / p>

提到的所有页面的ViewModels也都定义为常规ViewModels-这里没有技巧。

唯一的窍门是从其他ViewModel激活到这些页面的导航:

    private async Task ProcessLogin()
    {
        await NavigationService.Navigate<HomeMasterDetailMenuViewModel>();
        await NavigationService.Navigate<HomeMasterDetailRootViewModel>();
    }

答案 1 :(得分:0)

如果您使用MvvmCross的游乐场应用,请尝试再次获取其来源,可能问题已根据this comment

解决