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

8

我正在开发一个 PRISM 应用程序,其中我们会钻取数据以获取更多细节信息。 在我的实现中,我采用了嵌套的 MVVM 架构,当我向下导航树时,我想将一个模型传递给我的新视图。

据我所知,目前 PRISM 允许传递字符串,但不允许传递对象。我想知道如何解决这个问题的方法。

3个回答

7
我通常使用一种服务,在该服务中注册我想要传递的对象并获取一个GUID。这些对象被存储在哈希表中,当在Prism中导航时,我将GUID作为参数传递,然后可以使用它来检索对象。
希望这对你有意义!

2
那很有道理。PRISM不支持在导航期间传递对象,这真是太遗憾了,如果支持的话,生活会变得更加轻松。 - Vitalij

4
我会使用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;
                    ...
                }
    }
}

提示:如果这篇文章对您有所帮助,请将其标记为答案。


1
如果您在导航到同一区域中的视图,则OnNavigatedFrom才能正常工作。如果您在另一个区域中,则可以执行以下操作:_regionManager.Regions [RegionNames.MainRegion] .Context = new List <DataItem> {new DataItem()};,然后调用RequestNavigate。 - Martin Andersen

2

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接