已经做了很多拖网捕鱼,并找到了我需要的一些信息,但仍然没有找到如何将所有部分组合在一起。我得到1.防止构建的错误,2。没有消息出现,或者3.消息出现但是程序在此期间继续,无论如何。
所以,我想问一个用户的问题,该问题涉及从他们之前的会话重新加载信息(或者重新开始)。它应该等待这个答案。我知道我需要async / await在那里,我也需要答案(作为布尔或字符串)。我还发现我需要Device.BeginInvokeOnMainThread和/或OnAppearing,以便消息实际出现在第一位。我见过的大多数例子都是围绕按钮点击或其他事件,但是我希望它在开始时运行,而不是做任何其他事情,直到我得到答案(因为在第一个屏幕上加载信息)取决于答案)。
那么,对于DisplayAlert("恢复?","你想从上次会话重新加载数据吗?","是",&# 34;没有"),如何将其包装起来以便在启动时出现,并且在回答之前没有任何反应(以便我重新加载或重新初始化),我可以从其他地方获取该答案(即将结果粘贴到某些变量中以便其余代码访问)?这是我第一次使用DisplayAlert,我第一次使用async / await,第一次使用Device.BeginInvoke ... - 我不断修补不同的变化,但继续得到上述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
}