我正在使用带有IoC的Prism。问题是如何通过导航传递一个对象(例如集合)。我看了这篇文章:如何在PRISM 4中导航到新视图时传递对象。
目标视图代码:
以下是解决方案:
我提取了对象的哈希码并将其保存在一个Dictionary
中,哈希码作为键,对象作为值。
然后,我将哈希码附加到UriQuery
上。
之后,我只需要从目标视图中获取来自Uri的哈希码,并使用它从Dictionary
请求原始对象。
一些示例代码:
参数存储库类:
public class Parameters
{
private static Dictionary<int, object> paramList =
new Dictionary<int, object>();
public static void save(int hash, object value)
{
if (!paramList.ContainsKey(hash))
paramList.Add(hash, value);
}
public static object request(int hash)
{
return ((KeyValuePair<int, object>)paramList.
Where(x => x.Key == hash).FirstOrDefault()).Value;
}
}
调用方代码:
UriQuery q = null;
Customer customer = new Customer();
q = new UriQuery();
Parameters.save(customer.GetHashCode(), customer);
q.Add("hash", customer.GetHashCode().ToString());
Uri viewUri = new Uri("MyView" + q.ToString(), UriKind.Relative);
regionManager.RequestNavigate(region, viewUri);
目标视图代码:
public partial class MyView : UserControl, INavigationAware
{
// some hidden code
public void OnNavigatedTo(NavigationContext navigationContext)
{
int hash = int.Parse(navigationContext.Parameters["hash"]);
Customer cust = (Customer)Parameters.request(hash);
}
}
就是这样。
我不确定这种解决方案是否是传递对象的最佳方式。我猜这可能是一个服务。这样做是一个好方法吗?还是有更好的方法?