如何使用 INavigationAware 后退按钮将参数传递到上一页

How to pass parameter to previous page using INavigationAware Back button

我在使用 INavigationAware 代码时遇到问题。我有 3 页。例如,我将其命名为 pageA、pageB 和 pageC。 PageA 是一个列表视图,我将使用 OnItemSelected

将参数传递给 pageB

PageA 视图模型

public void OnItemSelected(Complaint item)
        {
            if (item != null)
            {
                var param = new NavigationParameters();
                param.Add("id", item.Id);
                mNavigationService.NavigateAsync("pageB", param);
            }
        }

在页面B中,我将使用OnNavigatedTo获取参数。

PageB 查看模型

public async void OnNavigatedTo(NavigationParameters parameters)
        {
            var id = parameters["id"];
            Title = string.Format("{0}: {1}", Strings.ComplaintDetail_Title, id);
            await getComplaintDetail(Convert.ToInt32(id));

        }

从页面B,我将使用相同的方式将参数发送到页面C。但是现在,我在将参数传回 pageB 时遇到了问题。由于我使用的是左上角的 INavigation 后退按钮,因此我不知道如何将参数传回 pageB。问题是我需要将参数(主键)传递给所有页面以用于 select 和更新目的。请帮我。我不确定如何使用 OnNavigatedFrom 传递参数。

PageC 视图模型

public void OnNavigatedFrom(NavigationParameters parameters)
        {

        }

提前致谢。

我不想说显而易见的事情,但您是否尝试过在 OnNavigatedFrom 方法中添加参数集合?

    public void OnNavigatedFrom(NavigationParameters parameters)
    {
        parameters.Add("test", "testValue");   
    }

我使用 Xamarin.Essentials SecureStorage 来实现这个结果,只需使用密钥将您的值插入 SecureStorage,然后在需要时再次获取它:

导航到页面 B 时保存您的参数:

SecureStorage.SetAsync("current_id", YourParameterValue);

在您的 OnAppearing 事件(覆盖事件)中返回 BageB 时从 SecureStorage 获取值:

protected override void OnAppearing()
        {

            base.OnAppearing();
            var CurrentId = long.Parse(  SecureStorage.GetAsync("current_id").Result);
            this.BindingContext = new PageBViewModel(CurrentId) ;
        }

假设你的Id是long。

注意:我不确定这是一种干净的方法,但它确实有效。