PreviousPageModel 为空
PreviousPageModel is null
我有一个带有 freshmvvm 框架的 Xamarin.Forms 应用程序。根据文档,我可以使用 PreviousPageModel 属性 of FreshBasePageModel base class 来访问我从中导航的 PageModel 的数据。我这样导航:
public FirstPageModel()
{
_validator = new CalculatorValidator();
CalculateCommand = new Command(execute: () =>
{
ValidationResult = _validator.Validate(this);
RaisePropertyChanged(nameof(ValidationResult));
if (ValidationResult.IsValid)
{
CoreMethods.PushPageModel<SecondPageModel>();
}
});
}
导航发生,但在 SecondPageModel 构造函数中 PreviousPageModel 为空:
public SecondPageModel()
{
_previousModel = (FirstPageModel)PreviousPageModel;
}
我做错了什么?
谢谢。
编辑:
我也试过:
public FirstPageModel()
{
_validator = new CalculatorValidator();
CalculateCommand = new Command(Calculate);
}
private void Calculate()
{
ValidationResult = _validator.Validate(this);
RaisePropertyChanged(nameof(ValidationResult));
if(ValidationResult.IsValid)
{
CoreMethods.PushPageModel<SecondPageModel>(this);
}
}
问题是,直到这个时间点,在您的 PageModel 生命周期中,PreviousPageModel
属性 还没有被赋值。
现在我确定 属性 在调用 Init 生命周期方法时可用,即
public override void Init(object initData)
{
_previousModel = (FirstPageModel)PreviousPageModel;
}
但是如果您不想这样做并希望它严格地在您的构造函数中,您可以做的是调用基本实现并希望我们的朋友 micheal 已经在其中分配了这个 属性:
如下所示:
public SecondPageModel() : base()
{
}
我在这里得到了答案:
https://forums.xamarin.com/discussion/comment/365262/#Comment_365262
PreviousPageModel 为空,因为它尚未在构造函数中设置。将您的代码放在 ViewIsAppearing 生命周期事件中,然后您将获得正确的先前模型:
protected override void ViewIsAppearing(object sender, EventArgs e)
{
base.ViewIsAppearing(sender, e);
_previousModel = (FirstPageModel)PreviousPageModel;
}
我有一个带有 freshmvvm 框架的 Xamarin.Forms 应用程序。根据文档,我可以使用 PreviousPageModel 属性 of FreshBasePageModel base class 来访问我从中导航的 PageModel 的数据。我这样导航:
public FirstPageModel()
{
_validator = new CalculatorValidator();
CalculateCommand = new Command(execute: () =>
{
ValidationResult = _validator.Validate(this);
RaisePropertyChanged(nameof(ValidationResult));
if (ValidationResult.IsValid)
{
CoreMethods.PushPageModel<SecondPageModel>();
}
});
}
导航发生,但在 SecondPageModel 构造函数中 PreviousPageModel 为空:
public SecondPageModel()
{
_previousModel = (FirstPageModel)PreviousPageModel;
}
我做错了什么?
谢谢。
编辑:
我也试过:
public FirstPageModel()
{
_validator = new CalculatorValidator();
CalculateCommand = new Command(Calculate);
}
private void Calculate()
{
ValidationResult = _validator.Validate(this);
RaisePropertyChanged(nameof(ValidationResult));
if(ValidationResult.IsValid)
{
CoreMethods.PushPageModel<SecondPageModel>(this);
}
}
问题是,直到这个时间点,在您的 PageModel 生命周期中,PreviousPageModel
属性 还没有被赋值。
现在我确定 属性 在调用 Init 生命周期方法时可用,即
public override void Init(object initData)
{
_previousModel = (FirstPageModel)PreviousPageModel;
}
但是如果您不想这样做并希望它严格地在您的构造函数中,您可以做的是调用基本实现并希望我们的朋友 micheal 已经在其中分配了这个 属性:
如下所示:
public SecondPageModel() : base()
{
}
我在这里得到了答案:
https://forums.xamarin.com/discussion/comment/365262/#Comment_365262
PreviousPageModel 为空,因为它尚未在构造函数中设置。将您的代码放在 ViewIsAppearing 生命周期事件中,然后您将获得正确的先前模型:
protected override void ViewIsAppearing(object sender, EventArgs e)
{
base.ViewIsAppearing(sender, e);
_previousModel = (FirstPageModel)PreviousPageModel;
}