使用标题

时间:2017-01-30 16:40:06

标签: c# navigation prism

我试图创建一个导航日志,它与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);

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

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

1 个答案:

答案 0 :(得分:2)

有两种方法可以解决这个问题,而不是扩展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还是您自己设计的对象,都完全取决于您。

有些程序员倾向于仅使用Tuple进行原型设计,并转移到自定义对象进行最终实现,因为意图更加清晰。但是,那里没有硬性规定。

祝你好运!