2012-07-16 24 views
6

Estoy creando una aplicación WPF usando MVVMLight. Yo uso ViewModelLocator para crear viewmodels. Mi problema es pasar parámetros entre ellos.Cómo enviar parámetros entre viewmodels usando viewmodellocator

Por ejemplo, tenemos una situación:

Tenemos una cuadrícula con algunas entidades, cuando uno de ellos está doubleclicked Necesito crear una nueva vista con detalles de esa entidad. ¿Cómo enviar el ID del ítem seleccionado a ViewModel de la nueva Vista?

+3

Hola, está utilizando cualquier servicio de mensajería como Galasoft o cualquier mensaje para comunicarse desde ViewModel a View – ethicallogics

Respuesta

3

Normalmente, utilizaría algún tipo de sistema de mensajería, como Prism's EventAggregator o MVVM Light's Messenger.

Ambos sistemas me recuerdan a un sistema de paginación: cualquier parte de la aplicación puede transmitir mensajes y cualquier parte de la aplicación y suscribirse para escuchar mensajes.

Así que su comando de DoubleClick emitiría un LoadItemMessage que contiene el elemento seleccionado Id, y lo que es responsable de que incluya el artículo que suscribirse para recibir LoadItemMessages y se carga el elemento cada vez que oye un LoadItemMessage.

Si le interesa, tengo un breve artículo en mi blog sobre Communication between Viewmodels with MVVM que ofrece una descripción general de alto nivel de los sistemas de eventos.

+1

Gracias, sabía un poco sobre el sistema de mensajería, pero su artículo hizo las cosas simples – Eugene

1

Eso es un problema con ViewModelLocator (para pasar los parámetros a ViewModel from View xaml). Lo que puede hacer es crear un parámetro de propiedad de tipo de objeto o (de tipo su SelectedItem) en la clase ViewModelLocator. Enlace esto al SelectedItem de su Grid y luego páselo a su nuevo ViewModel. Espero que esto sea de ayuda. NOTA: Si crea la propiedad de tipo objeto, no olvide lanzarlo.

+0

. Si lo entiendo correctamente, su enfoque puede funcionar, pero será muy difícil administrar un sistema enorme. ¿Podría proporcionarnos algún ejemplo de código para ayudarme a entenderlo? Gracias – Eugene

Cuestiones relacionadas