C# 使用标题扩展Prism NavigationParameters

C# 使用标题扩展Prism NavigationParameters,c#,navigation,prism,C#,Navigation,Prism,我正在尝试实现一个导航日志,其中包含uri和导航参数,一个字符串,其中包含请求导航时创建的一些信息: public class ExtendedNavigationParameters : NavigationParameters { public string Titulo { get; set; } } 因此,当我想导航到某个特定对象时,我想传递一些标题以及Uri和Parameters集合,因此我在扩展参数对象中设置了该属性: ExtendedNavigationParamete

我正在尝试实现一个导航日志,其中包含uri和导航参数,一个字符串,其中包含请求导航时创建的一些信息:

public class ExtendedNavigationParameters : NavigationParameters
{
    public string Titulo { get; set; }
}
因此,当我想导航到某个特定对象时,我想传递一些标题以及Uri和Parameters集合,因此我在扩展参数对象中设置了该属性:

 ExtendedNavigationParameters parameters = new ExtendedNavigationParameters { {"Maquina", Maquina}};
 parameters.Titulo = Maquina.Descripcion;
然后通过
RequestNavigate
方法发送此参数:

_regionManager.RequestNavigate(IdRegion, Uri, parameters);
此时,parameters对象的类型为
ExtendedNavigationParameters
。但是,导航完成后,当我尝试通过
RegionNavigationJournal.CurrentEntry.Parameters
访问此信息时,对象的类型为
NavigationParameters
(尝试转换为
ExtendedNavigationParameters
的异常)


为什么会这样?对象是否在某个点重新创建?如何将该信息存储在
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);
}
要使用它:

private void DoNavigation()
{
    var parameters = new NavigationParameters();
    var paramPayload = new NavigationPayload("Maquina", _maquina);
    parameters.Add("Payload", paramPayload);
    _regionManager.RequestNavigate(IdRegion, Uri, parameters);
}
您是使用元组,还是使用自己设计的对象,完全取决于您自己

一些程序员倾向于仅在原型设计中使用元组,而在最终实现中使用自定义对象,因为意图更加明确。但是,那里没有硬性规定


祝你好运

这似乎不是个好主意。为什么要扩展导航参数?可以将任何对象作为名称/值对添加到参数集合中。要么将名称设置为所需的标题,要么将标题添加到值对象,要么使用元组,或者使用一个特殊对象将标题和对象作为一个复杂对象传递。@R.Richards,真的没有想到这一点。这对我有用。详细说明作为答案,我将把它设置为已解决。谢谢
private void DoNavigation()
{
    var parameters = new NavigationParameters();
    var paramPayload = new NavigationPayload("Maquina", _maquina);
    parameters.Add("Payload", paramPayload);
    _regionManager.RequestNavigate(IdRegion, Uri, parameters);
}