使用标题扩展 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 进行最终实现,因为意图更清晰一些。但是,那里没有硬性规定。

祝你好运!