首页 > 解决方案 > 当我在 TabbedPage ViewModels 中使用 PopAsync 时,它不起作用

问题描述

好的,所以在我之前的设计中,在我的 MainPage 上,它被称为 TasksGroupPage,我有一个“+”图标,它把我带到一个 NewTasksGroupPage 来填写表格,然后单击保存命令来创建一个新的 TasksGroup(所以我不需要 + 图标功能来加载页面了)。

这工作得很好,单击保存按钮后,它会将我带到 MainPage。

但我的问题是我改变了我的设计,我现在删除了 + 图标,而是创建了一个新选项卡,现在将我带到 NewTasksGroupPage。

要创建此选项卡,我只需将以下代码添加到我的 TasksGroupPage(主页):<views:NewTasksGroupPage></views:NewTasksGroupPage>

现在的问题是: 当我在我的 NewTaskPageViewModel 中单击保存命令时,该页面不会像之前那样将我带到最后一页,它会将所有文本留在输入框中,它只会在之后创建我的 TasksGroupPage尽管。

我应该如何设置这个新设计才能正常工作?如果不可能,有没有办法将 GestureRecognizers 添加到其中一个选项卡?

谢谢。

在这里你现在可以看到我的代码:

TasksGroupPage.xaml

<TabbedPage>
    <ContentPage>
    // some xaml
    </contentPage>
<views:NewTasksGroupPage></views:NewTasksGroupPage>

</TabbedPage>

TasksGroupPage.xaml.cs 这是我不再需要的功能,但这是我与 + 图标一起使用的功能

protected async void GoToNewTaskPage(object sender, EventArgs e)
{
    await Navigation.PushAsync(new Views.NewTasksGroupPage());
}

NewTaskPageViewModel.cs 这是我的保存命令的结尾,之前将我带到主页(TasksGroupPage),但现在它只是停留在那里并且不会将我的条目重置为空白(即使在其他选项卡式页面之间切换时)

    async Task SaveNewTask()
    {
    //some code
                    await Application.Current.MainPage.DisplayAlert("Save", "La tâche a été enregistrée", "OK");
                    await Application.Current.MainPage.Navigation.PopAsync();
                    NotifyPropertyChanged();
    
    }

标签: c#xamarinxamarin.forms

解决方案


如果您阅读文档 Xamarin.Forms Navigation

你会发现 NavigationPage 和 TabbedPage 是在 Xamarin.forms 中导航页面的两种不同方式。

Navigation.PushAsync并且Navigation.PopAsync只在 NavigationPage 中有效,在 TabbedPage 中无效,这就是为什么the page doesn't take me to the last page like it did before.

如果你使用 TabbedPage,你可以使用下面的代码来切换页面:

async void SaveNewTask(object sender, EventArgs args)
{

    //this here means the current ContentPage 
    //this.Parent = NavigationPage
    var tabbedPage = this.Parent.Parent as TabbedPage;

    //if you don't have navigationPage, just use:
    //var tabbedPage = this.Parent as TabbedPage;

    //Switch to first page in tabs
    tabbedPage.CurrentPage = tabbedPage.Children[0];
}

推荐阅读