CreateIntentFor<>中的TabHost pass参数

本文关键字:pass 参数 TabHost 中的 CreateIntentFor | 更新日期: 2023-09-27 18:10:44

下载最新版本的mvvmcross (V3)后,我有一些工作要做,将我的一些项目升级到新的状态。我不能完成的最后一件事是将参数从tabhost传递给视图模型。在旧版本中,它工作得很好(但它是不同的),现在我得到了一个错误。

但是首先这里的代码(第19行有问题(注意代码中的注释),第18行可以工作,但没有参数):

[Activity]
public class MainActivity : MvxTabActivity
{
    public new MainViewModel ViewModel
    {
        get { return (MainViewModel)base.ViewModel; }
        set { base.ViewModel = value; }
    }
    protected override void OnViewModelSet()
    {
        SetContentView(Resource.Layout.Main);
        TabHost.TabSpec spec;
        Intent intent;
        spec = TabHost.NewTabSpec("listeaktiv");
        spec.SetIndicator(App.indicatorActive, Resources.GetDrawable(Resource.Drawable.green));
        //spec.SetContent(this.CreateIntentFor(ViewModel.ListViewModel)); -> It works (But only without Parameters! How could I pass them here?)
        spec.SetContent(this.CreateIntentFor<ListViewModel>(new { parameter = App.indicatorActive })); //Exception (on the next Line)
        TabHost.AddTab(spec);
    }
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
    }
}

(应用程序。indicatorActive是我想传递的参数,它在App.cs中:(public static string indicatorActive = "Active";)

我的ListViewModel看起来像这样:

public class ListViewModel : BaseViewModel
{
        public ListViewModel(string parameter)
        {
        }
}
错误:

Unhandled Exception:
Cirrious.CrossCore.Exceptions.MvxException: Failed to load ViewModel for type 
INApplikationsMonitor.Core.ViewModels.ListViewModel from locator MvxDefaultViewModelLocator

CreateIntentFor<>中的TabHost pass参数

我的猜测是,这只是因为你正在使用旧的ViewModel生命周期。

在v3:

  • ViewModel构造函数参数用于IoC -用于服务的依赖注入。
  • 传递参数时,你需要在ViewModel
  • 中使用Init方法

有关更多信息,请参见:http://slodge.blogspot.co.uk/2013/03/v3-new-viewmodel-lifecycle.html:

v3中的默认ViewModelLocator使用4步流程构建新的ViewModel实例- CIRS:

  • 构建-使用IoC进行依赖注入
  • Init() -初始化导航参数
  • ReloadState() -墓碑后的补水
  • Start() -在初始化和补水完成时调用