C# 应用程序。当前。<;页面名称>;返回空值
我正在Xamarin中开发一个应用程序。表单使用MVVM模型,我使用PageService类中的DisplayAlert方法在整个ViewModels中显示警报:C# 应用程序。当前。<;页面名称>;返回空值,c#,xamarin,xamarin.forms,xamarin.android,xamarin.uwp,C#,Xamarin,Xamarin.forms,Xamarin.android,Xamarin.uwp,我正在Xamarin中开发一个应用程序。表单使用MVVM模型,我使用PageService类中的DisplayAlert方法在整个ViewModels中显示警报: public async Task DisplayAlert(string title, string message, string ok = "ok") { await Application.Current.MainPage.DisplayAlert(title, message, ok); } 一
public async Task DisplayAlert(string title, string message, string ok = "ok")
{
await Application.Current.MainPage.DisplayAlert(title, message, ok);
}
一切正常,因为我在测试设备上重新安装了应用程序,并做了一些不应该影响主页的小改动。现在,无论何时调用此DisplayAlert方法,都会引发异常:
System.NullReferenceException:“对象引用未设置为对象的实例。”
Xamarin.Forms.Application.MainPage.get返回null
我真的不知道这个错误是从哪里来的。我在谷歌上搜索了一下,唯一发现的是主页构造函数可能有一些问题,但在我的例子中,我没有看到任何问题
所以现在我陷入困境,不知道如何解决这个问题。你能至少告诉我一些关于如何找出主页返回空值的方法吗
非常感谢所有回复的人,我非常感谢你们的建议
问候,,
本扎
解决方案:
干杯,谢谢大家!我终于解决了这个问题:
因此,我有一个应用程序的构造函数,我按照Lucas Zhang的建议进行了编辑,并在其中添加了两个断点:
公共静态页面根页面{get;set;}
公共应用程序()
{
初始化组件();
MainPage=newmainpage();//断点1
App.RootPage=MainPage;//断点2
}
我发现,这段代码的执行方式如下:Debbuger在断点1处停止,然后在调试器到达断点2之前抛出异常。
现在,MainPage实际上是由4个其他选项卡组成的选项卡式页面,所有这些选项卡都是在调用“MainPage=new MainPage();”时初始化的。在其中一个选项卡中,我使用服务。该服务的基本功能是:初始化自身并确定用户是否做了某件事,如果没有,它将显示一个提示用户这样做的警报。所有这些都发生在主页完成初始化之前,因此调用App.Current.MainPage时,当然返回null
就这样,再次感谢大家 确保您已在应用程序的构造函数中设置了主页
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);
似乎是一个完全相同的答案吗?