MVVMCross与Xamarin.形式和主细节

MVVMCross与Xamarin.形式和主细节,xamarin,mvvmcross,xamarin.forms,Xamarin,Mvvmcross,Xamarin.forms,我正在尝试使用带有Mvvmcross的Xamarin.Forms主控详细信息导航 App.cs public partial class App : MvxFormsApp { public App() : base() { // The root page of your application DependencyService.Register<AppContext>(); InitializeCo

我正在尝试使用带有Mvvmcross的Xamarin.Forms主控详细信息导航

App.cs

public partial class App : MvxFormsApp
{
    public App()
        : base()
    {
        // The root page of your application
        DependencyService.Register<AppContext>();
        InitializeComponent();
        // MainPage = new MasterDetail(); doing this would raise an InvalidCastException
    }

    protected override void OnParentSet()
    {
    }

    protected override void OnStart()
    {
        base.OnStart();
        // Handle when your app starts
        // Initiate Navigation and navigate to the splashscreen
    }
...
公共部分类应用程序:MvxFormsApp
{
公共应用程序()
:base()
{
//应用程序的根页面
DependencyService.Register();
初始化组件();
//MainPage=new MasterDetail();这样做会引发InvalidCastException
}
受保护的覆盖无效OnParentSet()
{
}
受保护的覆盖void OnStart()
{
base.OnStart();
//在应用程序启动时处理
//启动导航并导航到splashscreen
}
...
App.Xaml:

<core:MvxFormsApp
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:controls="clr-namespace:Stago.Mhp.Instr.Pocm.Core.Controls;assembly=Stago.Mhp.Instr.Pocm.Core"
xmlns:converters="clr-namespace:Stago.Mhp.Instr.Pocm.Core.Converters;assembly=Stago.Mhp.Instr.Pocm.Core"
xmlns:forms9Patch="clr-namespace:Forms9Patch;assembly=Forms9Patch"
xmlns:core="clr-namespace:MvvmCross.Forms.Presenter.Core;assembly=MvvmCross.Forms.Presenter.Core"
x:Class="Stago.Mhp.Instr.Pocm.Core.App">
<Application.Resources>
    <ResourceDictionary>

        <Color x:Key="BlackC90">#414142</Color>
        <Color x:Key="BlackC50">#939598</Color>
        <Color x:Key="BlackC05">#F1F1F2</Color>
        <Color x:Key="Black.20">#33000000</Color>
        <Color x:Key="Blue">#008DA8</Color>
        <Color x:Key="Red">#EE3524</Color>
        <Color x:Key="Orange">#F6A01A</Color>
        <Color x:Key="White">#F8F8F8</Color>
...

#414142
#939598
#F1F2
#33000000
#008DA8
#EE3524
#F6A01A
#F8F8
...
MvxFormsApplicationActivity.cs(Droid端)

[活动(Label=“MvxFormsApplicationActivity”,ScreenOrientation=ScreenOrientation.grait)]
公共类MVX FORM应用程序活动:表单应用程序活动
{
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
Forms.Init(这个,bundle);
var mvxFormsApp=new App();
mvxFormsApp.MainPage=new MasterDetail();
LoadApplication(mvxFormsApp);
var presenter=Mvx.Resolve()作为MvxFormsDroidPagePresenter;
presenter.MvxFormsApp=MvxFormsApp;
Mvx.Resolve().Start();
}
}
不幸的是,ResourceDictionary没有被考虑在内,我的应用程序也没有设计

如果我删除mvvmcross集成并直接从应用程序继承(当然是App.cs和App.Xaml),它就可以工作了


编辑对于那些从一开始就遵循此问题的人:通过将主页分配放在
MvxFormsApplicationActivity

中,可以解决异常问题。请记住,要能够找到问题和相关细节,请提供有关它试图从何处进行转换的任何信息s在将来,代码的相关部分应该包括在这里。是的,都在要点中。我在例外情况中没有进一步的解释。我试图找到Xamarin.Forms mdb文件进行调试,但没有运气…问题是要点可能会消失…该死的对,只是懒惰:)所以它发生的那一行是在LoadApplication上。如果h一个更完整的堆栈跟踪。您是否可能存在某种版本不匹配?例如,如果MvvmCross表单是针对一个版本构建的,而您正在使用另一个版本。
[Activity(Label = "MvxFormsApplicationActivity", ScreenOrientation = ScreenOrientation.Portrait)]
public class MvxFormsApplicationActivity : FormsApplicationActivity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        Forms.Init(this, bundle);

        var mvxFormsApp = new App();
        mvxFormsApp.MainPage = new MasterDetail();
        LoadApplication(mvxFormsApp);

        var presenter = Mvx.Resolve<IMvxViewPresenter>() as MvxFormsDroidPagePresenter;
        presenter.MvxFormsApp = mvxFormsApp;

        Mvx.Resolve<IMvxAppStart>().Start();
    }
}