Xamarin表单内部构造函数显示警告未显示?

时间:2018-04-02 05:31:41

标签: c# xamarin xamarin.forms

我想在主页加载时显示提醒。所以我在构造函数中声明了显示警报。但我没有得到任何回应。

我附上了我的示例代码。

public Home()
{
    InitializeComponent();
    if (!(Plugin.Connectivity.CrossConnectivity.Current.IsConnected))
    {

        if (System.IO.File.Exists(path + "App" + "/Data.txt"))
        {
            Device.BeginInvokeOnMainThread(async () =>
            {
                await DisplayAlert("Success", "Saved", "OK");
            });

        }
        else
        {
            Device.BeginInvokeOnMainThread(async () =>
            {
                await DisplayAlert("Oops", "Login Required", "OK");
            });

        }

    }
    else
    {
        GetDetails();
    }

}

3 个答案:

答案 0 :(得分:9)

constructor旨在保留Initialization代码。在即将显示OnAppearing()时调用Page方法。displayAlert()将在此方法中成功。这是示例代码。

protected override void OnAppearing()
    {

        Application.Current.MainPage.DisplayAlert("Success", "Saved", "OK");

        base.OnAppearing();

}

按照其他答案中的建议,在constructornew Task(Init).Start();中保留初始化代码。将if else的状态保存在bool类型的字段中。根据字段更改OnAppearing()方法中的消息。

答案 1 :(得分:1)

你不能在课程的.ctor中直接await Task(搜索SO,这里有很多Q& A)。

在你的.ctor中,在InitializeComponent开始一个无效任务(火灾和遗忘风格)之后:

new Task(Init).Start();

虚拟任务Init将如下所示:

async void Init()
{
    if (!(Plugin.Connectivity.CrossConnectivity.Current.IsConnected))
    {
        ~~~
    }
    else
    {
        GetDetails();
    }
}

答案 2 :(得分:0)

您在InitializeComponent()中使用

 await DisplayAlert("Success", "Saved", "OK"); 而不是像Application.Current.MainPage.DisplayAlert("Success", "Saved", "OK");这样使用 那就可以了。