【问题标题】:PopAsync not working when i use it in a TabbedPage ViewModels当我在 TabbedPage ViewModels 中使用 PopAsync 时,它不起作用
【发布时间】:2020-07-14 14:07:40
【问题描述】:

好的,所以在我之前的设计中,在我的 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();
    
    }

【问题讨论】:

  • 您正试图强制选项卡式 UI 做一些它实际上不适合的事情
  • @Jason 所以这不可能吗?有没有办法可以将 GestureRecognizers 添加到其中一个选项卡?

标签: c# xamarin xamarin.forms


【解决方案1】:

如果您阅读document Xamarin.Forms Navigation

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

Navigation.PushAsyncNavigation.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];
}

【讨论】:

  • 感谢您的回复,目前由于我的 SaveNewTask 方法位于 ViewModels 中,我认为我无法获得 Parent 关键字(无法识别)。任何想法 ?谢谢。
  • 有关更多信息:我的应用程序从 TasksGroupPage 开始,这是唯一具有 TabbedPage 属性的页面,然后当我单击 + 选项卡时,它会将我带到 NewTasksGroupPage,它是与 NewTaskPageViewModel 链接的 ContentPage其中有保存命令(我认为你这样做的方式来自 xaml.cs 文件)
  • 你能分享我们a Minimal, Reproducible Example吗?如果在 VM 中无法实现,不如在 VM 中使用 MessagingCenter 通知 Page 返回上一页。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 2021-10-25
  • 1970-01-01
  • 1970-01-01
  • 2019-10-08
  • 1970-01-01
相关资源
最近更新 更多