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)
当 Application.Current 为 NULL 时如何退出 wpf 应用程序?
UWP 应用程序错误:“无效的绑定路径‘Application.Current’:在类型‘MainPage’上找不到属性‘Application’”
在 WPF / Regex 中读取 Application.Current.Properties 的整数
如何测试包含Application.Current.Properties.ContainsKey(“token”)的方法