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

时间:2011-04-11 17:09:25

标签: wpf navigation prism

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

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

3 个答案:

答案 0 :(得分:7)

我通常使用一种服务,在那里我注册了我希望用guid传递的对象。这些存储在哈希表中,当在棱镜中导航时,我将guid作为参数传递,然后可以用来检索对象。

希望这对你有意义!

答案 1 :(得分:3)

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

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

答案 2 :(得分: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