如何使用 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。
注意:我不确定这是一种干净的方法,但它确实有效。
我在使用 INavigationAware 代码时遇到问题。我有 3 页。例如,我将其命名为 pageA、pageB 和 pageC。 PageA 是一个列表视图,我将使用 OnItemSelected
将参数传递给 pageBPageA 视图模型
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。
注意:我不确定这是一种干净的方法,但它确实有效。