gpt4 book ai didi

c# - 在 PRISM 4 中导航到新 View 时如何改进传递对象

转载 作者:行者123 更新时间:2023-11-30 14:15:47 24 4
gpt4 key购买 nike

我将 Prism 与 IoC 结合使用。问题是通过导航传递对象(如集合)。我在看这篇文章:How to Pass an object when navigating to a new view in PRISM 4

这就是解决方案

我提取对象的哈希码并将其保存在 Dictionary 中,哈希码作为键,对象作为对的值。

然后,我将哈希码附加到 UriQuery

之后,我只需要获取来自目标 View 上的 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);

目标 View 代码:

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);
}
}

就是这样。

我不确定这个解决方案是否是传递对象的最佳方案。我想这可能是一项服务。这样做的好方法还是有更好的方法?

最佳答案

我发布了一个更简单的方法。在这里提一下供引用——

我会使用 OnNavigatedTo 和 OnNavigatedFrom 方法通过 NavigationContext 传递对象。

首先从INavigationAware接口(interface)派生出viewmodel——

 public class MyViewModel : INavigationAware
{ ...

然后您可以实现 OnNavigatedFrom 并将要传递的对象设置为导航上下文,如下所示 -

void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext)
{
SharedData data = new SharedData();
...
navigationContext.NavigationService.Region.Context = data;
}

当你想接收数据时,在第二个 View 模型中添加如下代码——

void INavigationAware.OnNavigatedTo(NavigationContext navigationContext)
{
if (navigationContext.NavigationService.Region.Context != null)
{
if (navigationContext.NavigationService.Region.Context is SharedData)
{
SharedData data = (SharedData)navigationContext.NavigationService.Region.Context;
...
}
}
}

关于c# - 在 PRISM 4 中导航到新 View 时如何改进传递对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9334321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com