Application.Current.<PageName> 返回 null

Posted

技术标签:

【中文标题】Application.Current.<PageName> 返回 null【英文标题】:Application.Current.<PageName> returns null 【发布时间】:2021-01-01 03:37:12 【问题描述】:

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

public async Task DisplayAlert(string title, string message, string ok = "ok")

    await Application.Current.MainPage.DisplayAlert(title, message, ok);

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

System.NullReferenceException: '对象引用未设置为对象的实例。'

Xamarin.Forms.Application.MainPage.get 返回 null

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

所以现在我被卡住了,不知道如何解决这个问题。能否请您至少指出一些有关如何找出 MainPage 为何返回 null 的方向?

非常感谢任何回复,非常感谢您的建议。

问候, 洪萨

解决方案:

干杯,谢谢大家!我终于设法解决了这个问题: 所以我有这个 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.Current.MainPage NullReferenceException in Constructor of MainPageModel 这能回答你的问题吗? App.Current.MainPage NullReferenceException in Constructor of MainPageModel 【参考方案1】:

确保您已在 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);

【讨论】:

以上是关于Application.Current.<PageName> 返回 null的主要内容,如果未能解决你的问题,请参考以下文章

Application.Current.Dispatcher.BeginInvoke(action) VS。 Application.Current.Dispatcher.Invoke(action)

WPF中Application.Current的使用

当 Application.Current 为 NULL 时如何退出 wpf 应用程序?

UWP 应用程序错误:“无效的绑定路径‘Application.Current’:在类型‘MainPage’上找不到属性‘Application’”

在 WPF / Regex 中读取 Application.Current.Properties 的整数

如何测试包含Application.Current.Properties.ContainsKey(“token”)的方法