Prism 4: RequestNavigate() not working

后端 未结 1 561
温柔的废话
温柔的废话 2021-02-18 21:28

I am building a demo app to learn the navigation features of Prism 4. The app has two modules--each one has three Views:

  • A UserControl with a text block (\"Welcome
相关标签:
1条回答
  • 2021-02-18 22:10

    Finally figured this one out. The answer is in the Developer's Guide to Microsoft Prism (Ver 4), pp. 120-121. It has two parts:

    First, the UserControl and RibbonTab objects were resolving from Unity as System.Object types. That's a limitation of Unity and the overload that I used to register the view objects. To get them to resolve to the correct types, you need to use a different overload for IUnityContainer.RegisterType():

    // Register other view objects with DI Container (Unity)
    m_Container.RegisterType<Object, ModuleAView>("ModuleAView");
    m_Container.RegisterType<Object, ModuleARibbonTab>("ModuleARibbonTab");
    

    This overload maps Unity's native System.Object resolution to the correct type for the view requested. See the note on p. 120 of the Developer's Guide.

    The second problem wasn't explicitly stated in my question, but it occured when I fixed the first problem. I wanted each module's RibbonTab to be removed when I switched to the other module. Since my Ribbon Region acts like an ItemsControl, both RibbonTabs ended up being shown--Module A's RibbonTab wasn't unloaded when I switched to Module B. To solve that problem, I implemented IRegionMemberLifetime on the RibbonTab classes. That issue is covered on p. 121 of the Developer's Guide.

    BTW, I implemented the IRegionMemberLifetime interface on the View objects, rather than their View Models, because the interface does not impact the back end of the app, only the view object.

    0 讨论(0)
提交回复
热议问题