c# – 如何在PRISM 4中导航到新视图时改进传递对象
发布时间:2020-12-16 01:51:16 所属栏目:百科 来源:网络整理
导读:我正在使用Prism和IoC.问题是通过导航传递对象(如集合).我正在看这篇文章: How to Pass an object when navigating to a new view in PRISM 4 这就是解决方案 我提取对象的哈希码并将其保存在Dictionary中,哈希码作为键,对象作为对的值. 然后,我将哈希代码
我正在使用Prism和IoC.问题是通过导航传递对象(如集合).我正在看这篇文章:
How to Pass an object when navigating to a new view in 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); } } 而已. 我不确定这个解决方案是否最适合传递对象.我想这可能是一项服务.这是一个很好的方法,或者有更好的方法吗? 解决方法
我发布了一个更简单的方法在此提及以供参考 –
我将使用OnNavigatedTo和OnNavigatedFrom方法使用NavigationContext传递对象. 首先从INavigationAware接口派生viewmodel – public class MyViewModel : INavigationAware { ... 然后,您可以实现OnNavigatedFrom并将要传递的对象设置为导航上下文,如下所示 – void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext) { SharedData data = new SharedData(); ... navigationContext.NavigationService.Region.Context = data; } 当您想要接收数据时,在第二个视图模型中添加以下代码 – 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; ... } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |