Xamarin Forms - 坚持让这个DisplayAlert工作

时间:2017-02-03 03:27:49

标签: xamarin.forms

已经做了很多拖网捕鱼,并找到了我需要的一些信息,但仍然没有找到如何将所有部分组合在一起。我得到1.防止构建的错误,2。没有消息出现,或者3.消息出现但是程序在此期间继续,无论如何。

所以,我想问一个用户的问题,该问题涉及从他们之前的会话重新加载信息(或者重新开始)。它应该等待这个答案。我知道我需要async / await在那里,我也需要答案(作为布尔或字符串)。我还发现我需要Device.BeginInvokeOnMainThread和/或OnAppearing,以便消息实际出现在第一位。我见过的大多数例子都是围绕按钮点击或其他事件,但是我希望它在开始时运行,而不是做任何其他事情,直到我得到答案(因为在第一个屏幕上加载信息)取决于答案)。

那么,对于DisplayAlert("恢复?","你想从上次会话重新加载数据吗?","是",&# 34;没有"),如何将其包装起来以便在启动时出现,并且在回答之前没有任何反应(以便我重新加载或重新初始化),我可以从其他地方获取该答案(即将结果粘贴到某些变量中以便其余代码访问)?这是我第一次使用DisplayAlert,我第一次使用async / await,第一次使用Device.BeginInvoke ... - 我不断修补不同的变化,但继续得到上述3个结果中的一个。 : - (

3 个答案:

答案 0 :(得分:2)

您可以使用页面DisplayAlert方法中的OnAppearing

protected async override void OnAppearing()
    {
        var answer = await DisplayAlert("Title", "Message", "Positive Button - Yes", "Nagative Button - No");
        if (answer)
        {
            //Do your code here.
        }
    }

希望这对你有用。

答案 1 :(得分:0)

最近我刚刚收到一条通知,告知我为此我获得了“热门问题”奖。当我回来查看它时,我发现我从未发布过我的工作解决方案-非常抱歉!我现在将解决此问题(拖出使用2年的代码...)

此线程中的其他一些人给了我一些困惑(感谢Sten Petrov和Chandresh Khambhayata-出于某种原因不让我加标签),但是缺少的那个(我到其他地方了-甚至不记得在哪里现在,但也许forums.xamarin.com)是我 在那里需要base.OnAppearing()。这是相关代码的完整块...

protected async override void OnAppearing() {
    var Response=await DisplayAlert("Resume?", "Do you want to resume from where you left off?", "Resume", "Start fresh");
    base.OnAppearing();
    string Resuming=Response.ToString();
    if (Resuming=="True") { //your Resuming and other remaining code here

答案 2 :(得分:-1)

我使用Acr.Userdialogs nuget包。有了这个,你可以从你的mvvm代码调用对话框。你可以做到

var needToResume = await UserDialogs.Instance.ConfirmAsync(
   message: "Do you want to reload your data from last session?",
   title: "Resume?",
   okText: "yes",
   cancelText: "no",
   cancelToken: cancelationTokenSource.Token);

来自异步方法。或

var needToResume = UserDialogs.Instance.ConfirmAsync(
   message: "Do you want to reload your data from last session?",
   title: "Resume?",
   okText: "yes",
   cancelText: "no",
   cancelToken: cancelationTokenSource.Token).Result;

从一般方法和位置代码到对话框调用后立即导航/ do_other_things。 你也可以使用回调:

UserDialogs.Instance.Confirm(new ConfirmConfig
   {
      AndroidStyleId = null,
      Title = "Resume?",
      Message = "Do you want to reload your data from last session?",
      OkText = "yes",
      CancelText = "no",
      OnAction = DoThings
   });

private void DoThings(bool needToResume)
{
    //do things
}