在 PRISM 4 中导航到新视图时如何传递对象

Posted

技术标签:

【中文标题】在 PRISM 4 中导航到新视图时如何传递对象【英文标题】:How to Pass an object when navigating to a new view in PRISM 4 【发布时间】:2011-08-03 06:03:33 【问题描述】:

我正在开发一个 PRISM 应用程序,我们在其中深入研究数据(以获取更多详细信息)。 在我的实现中,我有一个嵌套的 MVVM,当我向下导航树时,我想将模型传递给我新创建的视图。

据我所知,目前 PRISM 允许传递字符串,但不允许传递对象。我想知道有什么方法可以解决这个问题。

【问题讨论】:

【参考方案1】:

我通常使用一个服务来注册我想要通过 guid 传递的对象。这些存储在哈希表中,当在 prism 中导航时,我将 guid 作为参数传递,然后可用于检索对象。

希望这对你有意义!

【讨论】:

这是有道理的。很遗憾 PRISM 不支持在导航期间传递对象,它会让生活变得更加轻松。【参考方案2】:

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

首先从 INavigationAware 接口导出视图模型 -

 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;
                    ...
                
    

ps。如果有帮助,请将此标记为答案。

【讨论】:

OnNavigatedFrom 仅在您导航到同一区域中的视图时才有效。如果您在另一个区域,您可以这样做:_regionManager.Regions[RegionNames.MainRegion].Context = new List new DataItem() ;然后调用 RequestNavigate【参考方案3】:

PRISM 支持提供参数:

var para = new NavigationParameters   "SearchResult", result  ;
_regionManager.RequestNavigate(ShellRegions.DockedRight, typeof(UI.SearchResultView).FullName, OnNavigationCompleted, para);

并在您的 View、ViewModel 或两者上实现 INavigationAware 接口。

您也可以在这里找到详细信息:https://msdn.microsoft.com/en-us/library/gg430861%28v=pandp.40%29.aspx

【讨论】:

以上是关于在 PRISM 4 中导航到新视图时如何传递对象的主要内容,如果未能解决你的问题,请参考以下文章

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

Prism:如何在区域中注入视图模型实例?

如何在 Xamarin 表单中的视图模型之间最好地传递信息 - Prism [关闭]

如何从集合视图单元导航到新的视图控制器?在斯威夫特

如何将对对象的引用传递给包含在导航控制器中的模态呈现的视图控制器?

当使用 RegionManager.RequestNavigate 方法添加视图时,有啥方法可以从 Prism 区域中删除视图(按名称)?