Estoy comenzando mi primera incursión en el mundo de Prism v4/MVVM con MEF & WPF. He creado con éxito un shell y, utilizando MEF, puedo descubrir e inicializar módulos. Sin embargo, no estoy seguro de la forma correcta de proporcionar navegación a las vistas expuestas por estos módulos.Prisma/MVVM (MEF/WPF): Exposición de navegación [Menú por ejemplo] de los módulos
Por ejemplo, supongamos que uno de los módulos expone tres vistas y quiero mostrar la navegación a estas vistas en un control de menú. Hasta ahora, he expuesto una vista correctamente en base a un MenuItem
y este MenuItem
contiene controles secundarios MenuItem
proporcionando así una jerarquía de comandos que se puede usar. Estupendo.
La cosa es, esto se siente mal. Ahora estoy afirmando dentro de mi módulo que la navegación (y por lo tanto el shell) DEBE soportar el uso de los menús. ¿Qué sucede si quiero cambiar a usar un ToolBar
o incluso un Ribbon
? Entonces tendría que cambiar todos mis módulos para exponer los tipos de control correspondientes para el shell.
He visto alrededor y en algunos sitios se menciona el uso de un "Servicio" para proporcionar navegación, por lo que durante la inicialización del módulo, las opciones de navegación se agregan al servicio que a su vez es utilizado por el shell para mostrar esta navegación en el formato que desee (ToolBar
, TreeView
, Ribbon
, MenuItem
etc.) - pero no puedo encontrar ningún ejemplo de esto.
Para poner todo esto en perspectiva, finalmente estoy buscando poder seleccionar vistas desde un menú y/u otro control de navegación (probablemente un Ribbon
) y luego abrir esas vistas bajo demanda dentro de un TabControl. Ya he llegado a poder crear las vistas en el TabControl
en el momento de la inicialización del módulo, ahora necesito el siguiente paso.
Lo que necesito saber es esto: cuál sería la forma correcta de exponer las opciones de navegación de forma tal que no se insista en el soporte de un control específico por parte del shell, y si un servicio es el camino a seguir, entonces ¿Cómo se podría juntar esto dentro de los patrones Prism/MVVM?
Gracias de antemano por cualquier información que pueda ofrecer.
Me gusta esto, ya que es una opción totalmente genérica que deja el caparazón para decidir cómo va a mostrar los elementos. Dicho esto, he tenido más ideas propias sobre el tema y realmente he ido por otra ruta que documentaré como una respuesta separada. Gracias. –
No olvide que puede hacer que un 'MenuItemViewModel' se ajuste a MenuItems (verificable o que tenga subelementos). Tendrás que hacer una interfaz más específica. Pero este fue un ejemplo. Que te diviertas. – SandRock