xamarin 如何在MAUI中调用上一页函数?

ymdaylpp  于 2022-12-07  发布在  其他
关注(0)|答案(3)|浏览(199)

**我的问题:**我的父页面(AdminPanel.xaml)包含一个函数:更新所有材料列表()

它是导航堆栈上的上一页。
现在在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();

    }

但它不起作用

xkrw2x1b

xkrw2x1b1#

首先,我想指出的是,有很好的理由不保持您的业务逻辑在您的网页。
我建议你检查CommunityToolkit.MVVM/MAUI。然后添加一些服务,来为你做这项工作。或者使用EventToCommandBehavior来绑定你的页面事件。(出现,加载等)或者使用Messenger来发送/接收解耦段之间的数据。
你试图处理逻辑和导航的方式会带来很多问题。一个页面的导航应该与另一个页面的业务逻辑无关。

rt4zxlrg

rt4zxlrg2#

正如Jason所说,您可以在AdminPanel.xaml.cs中生成OnAppearing方法覆盖,并在OnAppearing中添加updateAllMaterialList()函数,这样,每当AddUser.xaml页面导航到AdminPanel.xaml页面时,它就会自动调用updateAllMaterialList(),OnAppearing意味着当指定页面出现时,它就会被调用。

wj8zmpe1

wj8zmpe13#

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

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

相关问题