据我能找到的资料,MvvmCross视图模型的生命周期是MvvmCross视图模型生命周期
建筑 - 使用IoC的依赖注入
的init() - 导航参数
ReloadState初始化( ) - 立碑后补液
开始() - 初始化和补液完成时调用
我已经实现了我的如下:
public async Task Init(Guid ID)
{
await MPS_Mobile_Driver.Droid.DataModel.ShipmentDataSource.GetShipmentInventory(ID);
ShipmentInventory = ShipmentDataSource.CurrInventory;
ShipmentLots = await MPS_Mobile_Driver.Droid.DataModel.ShipmentDataSource.GetShipmentLotList((int)ShipmentInventory.idno, (short)ShipmentInventory.idsub);
Inv_DamageList = await ListDataSource.GetInv_Damage();
}
protected override void SaveStateToBundle(IMvxBundle bundle)
{
base.SaveStateToBundle(bundle);
bundle.Data["ShipmentInventory"] = StringSerializer.SerializeObject(ShipmentInventory);
bundle.Data["ShipmentLots"] = StringSerializer.SerializeObject(ShipmentLots);
bundle.Data["Inv_DamageList"] = StringSerializer.SerializeObject(Inv_DamageList);
}
protected override void ReloadFromBundle(IMvxBundle state)
{
base.ReloadFromBundle(state);
ShipmentInventory = StringSerializer.DeserializeObject<ShipmentInventory>(state.Data["ShipmentInventory"]);
ShipmentLots = StringSerializer.DeserializeObject<ShipmentLotList>(state.Data["ShipmentLots"]);
Inv_DamageList = StringSerializer.DeserializeObject<Inv_DamageList>(state.Data["Inv_DamageList"]);
state.Data.Clear();
}
首先,我似乎无法得到模拟器实际破坏活动时,我打的Home键,即使我有一个选项被选中。无论如何,这个活动似乎都在背景中。
这就是说,当我击中主键时,它调用SaveStateToBundle。它永远不会做的就是调用ReloadFromBundle。这使得很难测试实际正在发生的事情。我的担心是,根据生命周期,如果应用程序确实从逻辑删除中恢复,它会在调用ReloadFromBundle之前调用Init。由于Init是将参数传递给ViewModel的首选方法,因此它应该使用该参数来初始化数据。如果发生这种情况,它会调用ReloadFromBundle,它会覆盖在Init中初始化的数据。这很好,但效率很低。有没有一种方法可以在Init中知道ViewModel是由于新导航还是从墓碑中恢复而创建的?
感谢您的任何帮助。
吉姆