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;
}