【问题标题】:Extending Prism NavigationParameters with a title使用标题扩展 Prism NavigationParameters
【发布时间】:2017-01-30 16:40:05
【问题描述】:

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

public class ExtendedNavigationParameters : NavigationParameters
{
    public string Titulo { get; set; }
}

所以,当我想导航到某个特定对象时,我想传递一些标题以及 Uri 和参数集合,所以我在扩展参数对象中设置了该属性:

 ExtendedNavigationParameters parameters = new ExtendedNavigationParameters { {"Maquina", Maquina}};
 parameters.Titulo = Maquina.Descripcion;

然后这个参数通过RequestNavigate方法发送:

_regionManager.RequestNavigate(IdRegion, Uri, parameters);

此时,参数对象的类型为ExtendedNavigationParameters。但是,导航完成后,当我尝试通过RegionNavigationJournal.CurrentEntry.Parameters访问此信息槽时,对象的类型为NavigationParameters(尝试转换为ExtendedNavigationParameters时出现异常)。

这是为什么?对象是否在某个时候重新创建?如何将该信息存储在RegionNavigationJournal 中?

【问题讨论】:

  • 这似乎不是一个好主意。为什么要扩展NavigationParameters?您可以将任何对象作为名称/值对添加到参数集合中。将名称设置为您想要的标题,或将标题添加到值对象,或使用元组或用于将标题和对象作为一个复杂对象传递的特殊对象。
  • @R.Richards,并没有真正想到这一点。这对我有用。详细说明为答案,我将其设置为已解决。谢谢。

标签: c# navigation prism


【解决方案1】:

与扩展 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);
}

在 Tuple 对象 (paramPayload) 中,Item1 属性将指向标题,Item2 属性将指向感兴趣的对象。 _maquina 包含对您在导航期间尝试发送的对象的引用。它是如何创建的,我会让你处理的。

另一种可行的方法是创建一个对象,将信息打包成一个单元进行传递。

该对象的类可能如下所示:

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 用于原型设计,并转向自定义对象进行最终实现,因为意图更加清晰。但是,那里没有硬性规定。

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-04
    • 2017-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-04
    相关资源
    最近更新 更多