Nuestra aplicación es un proyecto grande con muchos módulos y vista. La ventana principal tiene una cinta y estamos buscando la mejor manera de integrar la cinta en la aplicación.Usando Microsoft (u otra) cinta con proyecto grande y MVVM
He creado un servicio que permite registrar las vistas de los módulos para agregar elementos de cinta relevantes para ellos y, además, cualquier instancia de vista principal puede proporcionar sus propios elementos de cinta relevantes para esa instancia. un RibbonItem es una clase pequeña que abstrae las opciones de un elemento de cinta, y tiene principalmente Título, Descripción, Comando, UIType y Elementos hijo. El servicio se encarga de reconstruir la cinta cuando cambia la vista principal.
Un colega mío cree que este es un MVVM malo, ya que los usuarios necesitan diseñar su vista de cinta en código C# y no en XAML, y también dice que sería difícil hacer que un grupo de elementos esté desactivado o habilitado de una vez, ya que cada comando de estos elementos deberá actualizar su CanExecute por separado. En su lugar, sugirió tener una vista principal de Ribbon y archivos ViewModel, donde cada desarrollador que desee agregar un botón de cinta para su módulo o vista necesitaría agregarlos en la vista XAML y agregar un comando relevante en ViewModel. Además, VisualStates se usará para determinar qué elementos se mostrarán o habilitarán en función de los cambios en el modelo de vista (como cambio de vista o cambio de selección). Realmente no me gusta esta solución, principalmente porque todos los desarrolladores tendrán que poner sus conocimientos de los módulos en un archivo una vez grande.
Tenga en cuenta que algunos elementos en la cinta (por ejemplo, Opciones, Salir) son comunes a toda la aplicación, mientras que algunos son relevantes para un dominio de aplicación específico y algunos solo son relevantes para una vista específica.
Edit: Supongo que mi pregunta principal es ¿cuál es la forma recomendada de permitir que múltiples equipos de desarrollo se integren en una sola cinta? ¿Deberíamos tener un solo RibbonView y un solo RibbonViewModel que contendrán todos los elementos posibles en una cinta, y cada equipo agregará sus elementos a estos V/VM y también definirá la lógica sobre cuándo mostrarlos (probablemente usando el estado visual) ? ¿O permitimos que cada vista, modelo de vista o módulo registre elementos de cinta (dentro de su propio código C#) contra un servicio y haga que el servicio represente la cinta según sea necesario cuando la vista activa cambie con todos los elementos registrados en ese tipo? ¿O hay alguna forma mejor de lograr esta integración?
¿Qué opinas? ¿Tiene una mejor idea o una opinión sobre cómo administrar el recurso de cinta única que es común para múltiples desarrolladores?
Gracias, splintor
Bueno, ViewModels no debería "saber" nada sobre la cinta. No deberían controlar lo que se muestra y lo que no se muestra en la cinta. La Vista debe responder a los cambios de estado de ViewModel para determinar qué y qué no mostrar. – Will
¿Qué significa "reconstruir la cinta"? Si tiene cintas diferentes para diferentes vistas, no es una buena práctica, porque la cinta debe ser solo una. Tu colega tiene razón. Y permitiría que solo un desarrollador cambie la cinta. – vorrtex
Esta es una aplicación con pestañas, con muchos tipos de pestañas; cada tipo tiene sus propios comandos de cinta. En lugar de tener todos los elementos en la cinta, pensé en reconstruir el contenido de la cinta con los elementos relevantes cuando los cambios de pestaña sean más fáciles. A diferencia de lo que dices, mi colega dice que todos editan su parte en los archivos de cinta principales, ya que cada desarrollador sabe cómo quiere que se vean sus elementos de cinta. Realmente no me gusta la idea de tener dos archivos grandes que centrelize el conocimiento sobre la aplicación completa y sus pantallas - es una gran aplicación y tenemos que descomponerlo tanto como sea posible. – splintor