如何使用"信息感知后退"按钮将参数传递到上一页



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

页面 A 视图模型

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

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

页面 B 视图模型

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。但是现在,我在将参数传递回页面 B 时遇到问题。由于我使用的是左上角的"后退"按钮,我不知道如何将参数传递回 pageB。问题是我需要将参数(主键(传递给所有页面以进行选择和更新。请帮助我。我不确定如何使用OnNavigatedFrom传递参数。

页面 C 视图模型

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);

当在出现事件中返回到 BageB 时(覆盖事件(,从安全存储获取值:

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

假设您的 ID 很长。

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

最新更新