我正在xamarin.forms上创建一个跨平台应用程序。
我正在使用一个插件来显示一个弹出窗口。
但是,await
键似乎不起作用,因为在任务完成之前继续执行。
另外,如果连续多次单击显示弹出窗口的按钮,则弹出窗口将被多次单击显示,而不是一次显示并阻塞所有其余部分。
我在按钮上附加了一条命令。每当单击按钮时,都会完全触发command属性,但是await
似乎无效。
public ICommand {
get => new Command(async () =>
{
if (ObjectivosDoMes.Count < 3)
await PopupNavigation.Instance.PushAsync(new NovoObjectivoDoMes(ObjectivosDoMes), true);
PodeAdicionarObjMes = ObjectivosDoMes.Count < 3 ? true : false;
});
}
我希望显示弹出窗口后的代码在关闭弹出窗口后立即执行。这是我用来显示弹出窗口的库:https://github.com/rotorgames/Rg.Plugins.Popup
答案 0 :(得分:0)
在您的代码中,您假设PopupNavigation返回的任务将在弹出窗口关闭时完成。相反,将弹出页面推送到导航堆栈后,此任务将完成。因此,等待此任务对检测弹出窗口何时关闭没有帮助。您可以加入弹出页面的“消失事件”。这是一些独立的工作示例,不依赖于其他View / ViewModel。
// in constructor
ButtonTappedCommand = new Command(async () => await OnButtonTappedCommand()) ;
page = new Rg.Plugins.Popup.Pages.PopupPage();
}
private async Task OnButtonTappedCommand()
{
page.Content = new Button()
{
Text="Close",
// close the popup page on tap
Command = new Command(()=>PopupNavigation.Instance.PopAsync())
};
page.Disappearing += Popup_Disappearing;
await PopupNavigation.Instance.PushAsync(page);
}
private void Popup_Disappearing(object sender, EventArgs e)
{
page.Disappearing -= Popup_Disappearing;
Debug.WriteLine("Someone closed the popup");
}
答案 1 :(得分:0)
await
工作正常。您正在使用的弹出库在显示而不是在关闭时完成其PushAsync
操作。请参见this issue,了解可让您await
关闭的弹出窗口的解决方法。