Pregunta

Yo pensé que había puesto aquí con la esperanza de que tal vez alguien con experiencia MVVM sería capaz de ofrecer opiniones sobre si la siguiente es una buena idea:

Estoy usando MVVM marco de la cincha de Sacha Barber, que incluye la clase SimpleCommand de Marlon Grech.

Una cosa esta clase no tiene el que algunas otras alternativas que tienen es una propiedad de texto, que puede ser utilizado comúnmente para unir elementos de la interfaz con el 'título' de la operación de comandos. En consecuencia, he estado escribiendo una extensión de esta clase, que expone una propiedad de texto.

Ahora, lo que yo he encontrado es un caso de uso donde yo estoy usando un comando para cambiar la conectividad a un dispositivo. Hay un montón de diferentes maneras en que podría poner en práctica este (no son siempre - es el software). Una forma sería exponer múltiples objetos de comando de mi modelo de vista - uno para 'desconexión' y otra para 'Conectar; tiene el modelo de vista exponer una propiedad que indica el estado de conexión (isConnected) y tienen la vista se unen de forma condicional para el comando Conectar o comando de desconexión. Mi reacción a esta opción, sin embargo, es ... puaj!

Lo que inicialmente empecé a buscar en su lugar no sólo se proporciona una propiedad de texto, sino también con el objeto de comando implementar INotifyPropertyChanged de manera que la propiedad de texto puede ser dinámicamente alterado por el modelo de vista a 'Conectar' o 'desconexión' de acuerdo con el estado del sistema. Al hacer esto, puedo evitar tener múltiples comandos y simplemente exponer a un solo objeto de comando 'ToggleConnection'.

A partir de este camino, sin embargo, se me ocurre que puede haber otras variaciones de este patrón según el cual la interfaz de usuario necesita ser alterado en función del estado del sistema. Por ejemplo, además de cambiar el texto de la orden de acuerdo con el estado de conexión, es posible que tenga lugares donde un icono tiene que cambiar en función del estado de conexión. Así, empecé a escribir una clase 'con estado' que implementa INotifyPropertyChanged, y expone dos propiedades - 'Texto' y 'Estado'. He hecho la clase genérica de modo que el tipo de Estado puede ser definido por el usuario (por lo general prefieren no utilizar 'objeto', donde evitable).

La pregunta que tengo es ... ¿Crees que esto es una buena o mala idea? Puede ser divergente de la original intención / diseño de comandos; Por lo que he visto, en general, puede darse el caso de que el comando objetos estaban destinados a ser sin estado, ya que son los verbos '' del sistema. Con comandos enrutados, si entiendo las cosas por lo general se esperaría correctamente sólo el destino del comando a tener estado. En particular, desde el mismo comando podría ser enviado a diferentes controladores dependiendo de donde se declaran los enlaces de comando.

Por lo tanto, estoy pensando que al menos con comandos enrutados, el estado no tendría sentido.

Sin embargo, no estoy trabajando con comandos enrutados - Estoy trata específicamente de comandos MVVM. En este caso, hay básicamente hay enrutamiento condicional de comandos -. Las vistas MVVM se unen directamente a los objetos de comando de un ViewModel particular, y es ejecutar y manipuladores CanExecute

En este caso, ¿tiene sentido?

He adjuntado una copia del código en cuestión, en caso de que sea de uso / interés.

Gracias, Phil

¿Fue útil?

Solución

Es realmente depende de ti lo que cree que sería más fácil trabajar con ellos.

Yo personalmente no pongo la propiedad .Texto en mis comandos, simplemente porque no consigo ninguna reutilización de estos comandos. Es diferente con los RoutedUICommands previstas en el marco (o comandos personalizados estáticos similares), ya que se vuelven a utilizar en todas partes y si la traducción de "Salir" fuera a cambiar en ese comando, que se reflejaría en toda la aplicación. Este no es el caso en su ejemplo -. Todo estaría sola vez

En el caso de que este texto de su texto del botón está muy disociado de su mando (aunque uno afecta al otro), por lo que probablemente va a terminar siendo más fácil y un poco menos código para desacoplar ellos, pero el ISN diferencia' t va a ser mucho y que va a terminar siendo una cuestión de gusto más que nada.

Definitivamente estoy con usted en el 2 comandos cosa - Blech. La mayoría de los delegados de botón que escribe tendrán que reaccionar ante el estado de alguna manera (servicio de hablar con está abajo, estos datos deben ser poblada de esta manera si el usuario selecciona esta opción, etc), así que realmente no creo que sea malo tener el delegado adaptarse a la información de estado en el modelo de vista.

De todos modos, esto es un poco prolijo ... la comida para llevar es "hacer lo que se siente cómodo".

Otros consejos

Al igual que la última crítica dijo: "Lo que se siente cómodo."

En mi caso, que suelen utilizar algo así como el DelegateCommand . Si necesito para unirse a algunos datos, que se unen a la máquina virtual. Cuando se ejecuta el comando, el ejecutado dentro de mi máquina virtual (a través del delegado proporcionado a la DelegateCommand a init). A continuación, el delegado puede ejecutada / maynot ejecutar algún código reutilizable para satisfacer el comando.

Parece que usted desea utilizar el sistema como su propia máquina virtual. Nunca pensé en hacer esto antes que yo, pero si se siente bien para ti, lo hago! :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top