在导航过程中传递参数
Prism-Documentation-CH
2023-2-4
要在您的应用程序中实现所需的导航行为,您通常需要在导航请求期间指定其他数据,而不仅仅是目标视图名称。NavigationContext对象提供对导航URI以及在其中或外部所指定参数的访问。您可以从IsNavigationTarget、OnNavigatedFrom和OnNavigatedTo方法中访问NavigationContext。
Prism提供NavigationParameters类来帮助指定和检索导航参数。NavigationParameters类维护一个name-value对列表,其中每个参数都会对应一个。您可以使用此类将参数作为导航URI的一部分或者用于传递对象参数。
下面的代码示例演示了如何将单个字符串参数添加到NavigationParameters实例,以便它可以附加到导航URI。
Employee employee = Employees.CurrentItem as Employee;
if (employee != null)
{
var navigationParameters = new NavigationParameters();
navigationParameters.Add("ID", employee.Id);
_regionManager.RequestNavigate(
RegionNames.TabRegion,
new Uri("EmployeeDetailsView" + navigationParameters.ToString(), UriKind.Relative)
);
}
此外你还可以将对象参数添加到NavigationParameters实例中,并将其作为RequestNavigate方法的参数传递。下面的代码使用了更简单的基于字符串的导航:
Employee employee = Employees.CurrentItem as Employee;
if (employee != null)
{
var parameters = new NavigationParameters();
parameters.Add("ID", employee.Id);
parameters.Add("myObjectParameter", new ObjectParameter());
regionManager.RequestNavigate(RegionNames.TabRegion, "EmployeeDetailsView", parameters);
}
你可以通过NavigationContext对象的Parameters属性来获取导航参数。这个属性返回一个NavigationParameters类的实例,该类提供一个索引器属性以允许您轻松访问各个参数,而不用管它们是通过请求参数还是通过RequestNavigate方法传递的。
public void OnNavigatedTo(NavigationContext navigationContext)
{
string id = navigationContext.Parameters["ID"];
ObjectParameter myParameter = navigationContext.Parameters["myObjectParameter"];
}
您还可以使用泛型以类型安全的方式检索参数:
public void OnNavigatedTo(NavigationContext navigationContext)
{
ObjectParameter objectParameter = navigationContext.Parameters.GetValue<ObjectParameter>("myObjectParameter");
}