我试图创建一个导航日志,它与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
中存储该信息?
答案 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进行原型设计,并转移到自定义对象进行最终实现,因为意图更加清晰。但是,那里没有硬性规定。
祝你好运!