使用C#和Xamarin表单 - 如何在不设置闭包链的情况下关闭一个模态

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用C#和Xamarin表单 - 如何在不设置闭包链的情况下关闭一个模态相关的知识,希望对你有一定的参考价值。

在我的应用程序的一个阶段(androidios是我们关心的那个)我们有三个页面接收详细信息然后打开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 表单设置视觉材料输入的边框颜色?

如何在 Xamarin 表单中使用 MVVM 仅为集合视图中的选定框架设置颜色?

Xamarin 表单设置 Picker SelectedItem

将转换器与 Label 的可见性 Xamarin 表单一起使用时如何将默认值设置为 false

如何将相同的viewmodel设置为xamarin表单中的新mvvm中的两个视图

如何设置 xamarin 表单输入字段的禁用文本颜色?