使用标题扩展 Prism NavigationParameters
Extending Prism NavigationParameters with a title
我正在尝试实现一个导航日志,它具有 uri 和导航参数,以及一个包含在请求导航时创建的一些信息的字符串:
public class ExtendedNavigationParameters : NavigationParameters
{
public string Titulo { get; set; }
}
所以,当我想导航到某个特定的 object 时,我想将一些标题与 Uri 和参数 collection 一起传递,所以我将 属性 设置为我的扩展参数 object:
ExtendedNavigationParameters parameters = new ExtendedNavigationParameters { {"Maquina", Maquina}};
parameters.Titulo = Maquina.Descripcion;
然后这个参数通过RequestNavigate
方法发送:
_regionManager.RequestNavigate(IdRegion, Uri, parameters);
此时,参数 object 的类型为 ExtendedNavigationParameters
。但是,导航完成后,当我尝试通过 RegionNavigationJournal.CurrentEntry.Parameters
访问此信息时,object 的类型为 NavigationParameters
(尝试转换为 ExtendedNavigationParameters
的异常)。
这是为什么? object 是否在某个时候重新创建?我如何将该信息存储在 RegionNavigationJournal
中?
与扩展 NavigationParameters
相比,有几种方法可以解决这个问题。
第一种是用元组传递信息
private void DoNavigation()
{
var parameters = new NavigationParameters();
var paramPayload = new Tuple<string, Maquina>("Maquina", _maquina);
parameters.Add("Payload", paramPayload);
_regionManager.RequestNavigate(IdRegion, Uri, parameters);
}
在元组object(paramPayload
)中,Item1属性会指向标题,Item2属性会指向object兴趣。 _maquina
包含对您尝试在导航期间发送的 object 的引用。如何创建,我会让你照顾。
另一种可行的方法是创建一个 object 将信息打包成一个单元以通过。
此 object 的 class 可能如下所示:
public class NavigationPayload
{
public NavigationPayload(string title, object payload)
{
Title = title;
Payload = payload;
}
public string Title { get; set; }
public object Payload { get; set; }
}
使用方法:
private void DoNavigation()
{
var parameters = new NavigationParameters();
var paramPayload = new NavigationPayload("Maquina", _maquina);
parameters.Add("Payload", paramPayload);
_regionManager.RequestNavigate(IdRegion, Uri, parameters);
}
是使用 Tuple 还是您自己设计的 object,完全取决于您。
一些程序员倾向于只使用 Tuple 进行原型设计,并转向自定义 object 进行最终实现,因为意图更清晰一些。但是,那里没有硬性规定。
祝你好运!
我正在尝试实现一个导航日志,它具有 uri 和导航参数,以及一个包含在请求导航时创建的一些信息的字符串:
public class ExtendedNavigationParameters : NavigationParameters
{
public string Titulo { get; set; }
}
所以,当我想导航到某个特定的 object 时,我想将一些标题与 Uri 和参数 collection 一起传递,所以我将 属性 设置为我的扩展参数 object:
ExtendedNavigationParameters parameters = new ExtendedNavigationParameters { {"Maquina", Maquina}};
parameters.Titulo = Maquina.Descripcion;
然后这个参数通过RequestNavigate
方法发送:
_regionManager.RequestNavigate(IdRegion, Uri, parameters);
此时,参数 object 的类型为 ExtendedNavigationParameters
。但是,导航完成后,当我尝试通过 RegionNavigationJournal.CurrentEntry.Parameters
访问此信息时,object 的类型为 NavigationParameters
(尝试转换为 ExtendedNavigationParameters
的异常)。
这是为什么? object 是否在某个时候重新创建?我如何将该信息存储在 RegionNavigationJournal
中?
与扩展 NavigationParameters
相比,有几种方法可以解决这个问题。
第一种是用元组传递信息
private void DoNavigation()
{
var parameters = new NavigationParameters();
var paramPayload = new Tuple<string, Maquina>("Maquina", _maquina);
parameters.Add("Payload", paramPayload);
_regionManager.RequestNavigate(IdRegion, Uri, parameters);
}
在元组object(paramPayload
)中,Item1属性会指向标题,Item2属性会指向object兴趣。 _maquina
包含对您尝试在导航期间发送的 object 的引用。如何创建,我会让你照顾。
另一种可行的方法是创建一个 object 将信息打包成一个单元以通过。
此 object 的 class 可能如下所示:
public class NavigationPayload
{
public NavigationPayload(string title, object payload)
{
Title = title;
Payload = payload;
}
public string Title { get; set; }
public object Payload { get; set; }
}
使用方法:
private void DoNavigation()
{
var parameters = new NavigationParameters();
var paramPayload = new NavigationPayload("Maquina", _maquina);
parameters.Add("Payload", paramPayload);
_regionManager.RequestNavigate(IdRegion, Uri, parameters);
}
是使用 Tuple 还是您自己设计的 object,完全取决于您。
一些程序员倾向于只使用 Tuple 进行原型设计,并转向自定义 object 进行最终实现,因为意图更清晰一些。但是,那里没有硬性规定。
祝你好运!