使用C#和Xamarin表单 - 如何在不设置闭包链的情况下关闭一个模态
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用C#和Xamarin表单 - 如何在不设置闭包链的情况下关闭一个模态相关的知识,希望对你有一定的参考价值。
在我的应用程序的一个阶段(android和ios是我们关心的那个)我们有三个页面接收详细信息然后打开webView以便用户输入他们的卡详细信息以进行付款 - 这不可能是由于Apple的指导原则在应用程序中完成。
我需要以一种方式格式化导航,当用户完成webView时,它会关闭,然后关闭之前的3个模态以返回到原始页面。我已经全部使用了Appearing事件,因此每个页面都会自行关闭:
this.Appearing += async (s, e) =>
{
await Navigation.PopModalAsync();
};
我现在面临的问题是,当用户按下手机上的后退按钮时,它会关闭他们已经通过的所有页面并返回到原始页面。我考虑过实现自定义导航栏并禁用硬件上的后退按钮,但这会导致出现事件出现同样的问题。
有没有简单的方法来解决这个问题?
编辑:相关代码;
async void OnButtonClicked(object sender, EventArgs eventArgs)
{
if (IsConnected)
{
ActivityIndicator.IsVisible = true;
var button = (Button) sender;
button .IsEnabled = false;
await Navigation.PushModalAsync(new Page());
this.Appearing += (s, e) =>
{
ActivityIndicator.IsVisible = false;
button.IsEnabled = true;
RefreshPage();
};
}
else
{
NoInternetLabel.IsVisible = true;
}
}
用这个:
YourButton.Clicked += OpenPage;
OpenPage看起来像这样:
async public void OpenPage(object sender, EventArgs args)
{
await Navigation.PushAsync(new PageToShow());
}
您无需执行任何操作来处理PageToShow()
关闭,当用户按下后退按钮时,这会自动发生。
通过使用Actions来解决此问题。在每个新的Page()中,我们传递了一个异步方法,一旦完成之后关闭它;
var nextPage = new Page(async () =>
{
await Navigation.PopModalAsync();
_completedSuccessfully();
});
await Navigation.PushModalAsync(nextPage);
并在新的页面类;
private readonly Action _completedSuccessfully;
public Page(Action completedSuccessfully)
{
_completedSuccessfully = completedSuccessfully;
}
这意味着当webView关闭时,它调用completedSuccessfully()动作,然后将所有这些动作链接到原始页面。
以上是关于使用C#和Xamarin表单 - 如何在不设置闭包链的情况下关闭一个模态的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Xamarin 表单中使用 MVVM 仅为集合视图中的选定框架设置颜色?
Xamarin 表单设置 Picker SelectedItem
将转换器与 Label 的可见性 Xamarin 表单一起使用时如何将默认值设置为 false