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

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

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

【问题讨论】:

    标签: wpf navigation 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

    【讨论】:

      猜你喜欢
      • 2012-03-09
      • 2012-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-27
      • 2011-09-21
      • 1970-01-01
      相关资源
      最近更新 更多