Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 在PRISM 4中导航到新视图时如何传递对象_Wpf_Navigation_Prism - Fatal编程技术网

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

Wpf 在PRISM 4中导航到新视图时如何传递对象,wpf,navigation,prism,Wpf,Navigation,Prism,我正在开发一个PRISM应用程序,我们在其中深入研究数据(以获得更多细节)。 在我的实现中,我有一个嵌套的MVVM,当我沿着树向下导航时,我希望将一个模型传递给我新创建的视图 据我所知,目前PRISM允许传递字符串,但不允许传递对象。我想知道克服这个问题的方法。我通常使用一个服务,在该服务中,我注册我希望通过guid传递的对象。它们存储在哈希表中,在prism中导航时,我将guid作为参数传递,然后可以使用该参数检索对象 希望这对你有意义 我将使用OnNavigatedTo和OnNavigate

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


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

我通常使用一个服务,在该服务中,我注册我希望通过guid传递的对象。它们存储在哈希表中,在prism中导航时,我将guid作为参数传递,然后可以使用该参数检索对象


希望这对你有意义

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

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

PRISM支持提供参数:

var para = new NavigationParameters { { "SearchResult", result } };
_regionManager.RequestNavigate(ShellRegions.DockedRight, typeof(UI.SearchResultView).FullName, OnNavigationCompleted, para);
并在视图、ViewModel或两者上实现INavigationAware界面


您还可以在此处找到详细信息:

这很有意义。可惜PRISM不支持在导航过程中传递对象,这会让生活变得更轻松。OnNavigatedFrom仅在您的导航指向同一区域中的视图时才起作用。如果您在另一个区域,则可以执行以下操作:_regionManager.Regions[RegionNames.MainRegion].Context=new List{new DataItem()};然后打电话给RequestNavigate