c# – 如何在导航到PRISM中的新视图时传递对象?

据我所知,目前PRISM允许传递字符串,但不允许传递对象.我想知道克服这个问题的方法是什么.

我想传递一个列表集合.在我的情况下,UriQuery没用,在这种情况下我该怎么办?

解决方法:

我有自己的技术.

我提取对象的哈希码并将其保存在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);
    }
}

而已.

上一篇:c# – 使用Prism更改Xamarin Forms中的页面过渡动画


下一篇:c# – 如何使用VSTO和MEF解析ServiceLocator.Current为null