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
我的猜测是,这只是因为你正在使用旧的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() -在初始化和补水完成时调用