Application.Current.<PageName> returns 空

Application.Current.<PageName> returns null

我正在 Xamarin.Forms 中使用 MVVM 模型开发应用程序,我在 PageService class 中使用此方法 DisplayAlert 在整个 ViewModels 中显示警报:

public async Task DisplayAlert(string title, string message, string ok = "ok")
{
    await Application.Current.MainPage.DisplayAlert(title, message, ok);
}

一切正常,因为我在测试设备上重新安装了该应用程序并进行了一些不应影响 MainPage 的小更改。现在,每当我调用此 DisplayAlert 方法时,都会抛出异常:

System.NullReferenceException: 'Object reference not set to an instance of an object.'

Xamarin.Forms.Application.MainPage.get returned null

真不知道哪里出错了。我四处搜索,唯一发现的是 MainPage 构造函数中可能存在一些问题,但就我而言,我没有看到任何问题。

所以现在我被困住了,不知道如何解决这个问题。你能不能至少给我指出一些方向,告诉我如何找出 MainPage returns 为空的原因?

非常感谢任何人的回应,我非常感谢你的建议。

此致, 本座

解决方案:

干杯,谢谢大家!我终于设法解决了这个问题: 所以我有这个 App 的构造函数,我按照 Lucas Zhang 的建议进行了编辑,并在那里添加了两个断点:

public static Page RootPage { get; set; }
public App()
{
    InitializeComponent();
    MainPage = new MainPage();  //Breakpoint 1
    App.RootPage = MainPage;    //Breakpoint 2
}

我发现,这段代码的执行方式如下:调试器在断点 1 处停止,然后在调试器到达断点 2 之前抛出异常。 现在,MainPage 实际上是包含 4 个其他选项卡的选项卡式页面,所有这些选项卡都在“MainPage = new MainPage();”时初始化。叫做。在其中一个选项卡中,我使用了一项服务。该服务所做的基本上是:初始化自身并确定用户是否做了某事,如果没有,它会显示一个警报,提示他这样做。所有这些都发生在 MainPage 完成初始化之前,因此当然在调用 App.Current.MainPage 时返回 null。

好了,就这样了,再次感谢大家!

确保您已经在 App.

的构造函数中设置了 MainPage
public App()
{
  InitializeComponent();

  MainPage = new xxxPage();

}

如果还是不行,您可以先使用下面的解决方法。

public static Page RootPage;

public App()
{
  InitializeComponent();

  MainPage = new MainPage();

  App.RootPage = this.MainPage;
}

并引用它

App.RootPage.DisplayAlert(title, message, ok);