如何在MAUI中调用上一页功能?

问题描述 投票:0回答:4

我的问题: 我的父页面(AdminPanel.xaml)包含一个函数:updateAllMaterialList()

这是导航堆栈上的上一页。

现在在 AddUser.xaml 页面上,我尝试通过调用 updateAllMaterialList() 来导航回来,如下所示:

    private async void GoToBack(object sender, EventArgs e)
    {
    await Navigation.PopAsync();

    NavigationPage navPage = (NavigationPage)App.Current.MainPage;
    Page page = navPage.Navigation.NavigationStack[navPage.Navigation.NavigationStack.Count - 1];
    ((AdminPanel)page).updateAllMaterialList();

    }

但是没用

c# .net xamarin maui
4个回答
1
投票

首先我想指出,有充分的理由不在页面中保留业务逻辑。

我建议您检查CommunityToolkit.MVVM/MAUI。 然后添加一些服务,为您完成这项工作。 或者使用 EvenToCommandBehavior 绑定页面事件。(出现、加载等) 或者使用 Messenger 在解耦的段之间发送/接收数据。

您尝试处理逻辑和导航的方式会带来很多问题。一个页面导航应该与另一页面业务逻辑无关。


0
投票

正如Jason所说,您可以在

OnAppearing
中生成
AdminPanel.xaml.cs
方法重写,并将updateAllMaterialList()函数添加到
OnAppearing
。因此,每当 AddUser.xaml 页面导航到 AdminPanel.xaml 页面时,它都会自动调用 updateAllMaterialList()。
OnAppearing
表示当指定页面出现时,会被调用。


0
投票

是的,正如他们所说,您可以使用 OnAppearing,一切都很好。但我也发现了这样的方法:

    var navPage = App.Current.MainPage;
        if (navPage.Navigation != null)
        {
            navPage = navPage.Navigation.NavigationStack[navPage.Navigation.NavigationStack.Count - 2];
            (navPage as AdminPanel).UpdateAllMaterialList();
        }

0
投票

您可以使用 Reflection 从 NavigatedTo 事件的 NavigatedToEventArgs 获取 PreviousPage 属性:

private void SomePage_NavigatedTo(object sender, NavigatedToEventArgs e)
{
    //get e.PreviousPage internal property with Reflection
    var prop = typeof(NavigatedToEventArgs).GetProperty("PreviousPage", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);
    //get previous page
    var prev = prop.GetValue(e) as AnotherPage;
    if (prev != null)
    {
        var value = prev.SomeValue;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.