mvvmlight galasoft silverlight mvvm mvvm-light

silverlight - galasoft - mvvmcross



Luz MVVM: cómo acceder a la propiedad en otro modelo de vista (3)

Estoy usando mvvm light para construir una aplicación Silverlight. ¿Hay algún fragmento de código que muestre cómo acceder a la propiedad o comando de un modelo de vista desde otro modelo de vista o detrás del código de control del usuario?

Supongo que es simple, pero de alguna manera me perdí algo.

Ueli


Puede usar Messenger para hacer esto: Enviar al usuario en el UserViewModel:

Messenger.Send<User>(userInstance);

simplemente enviaría el usuario a cualquier persona interesada.

Y registre un destinatario en su CardViewModel:

Messenger.Register<User>(this, delegate(User curUser){_curUser = curUser;});

o también puede enviar una solicitud desde su CardViewModel para gritar al usuario:

Messenger.Send<String, UserViewModel>("Gimme user");

Y reaccione sobre eso en UserViewModel:

Messenger.Register<String>(this, delegate(String msg) { if(msg == "Gimme user") Messenger.Send<User>(userInstance); });

(Es mejor usar una enumeración y no una cadena en un escenario real :))

Perhabs incluso puedes responder directamente pero no puedo verificarlo en este momento.

Solo mira esto: Mvvm light Messenger


Otra forma es usar la sobrecarga de RaisePropertyChanged que también difunde el cambio. Tú harías esto:

RaisePropertyChanged(() => MyProperty, oldValue, newValue, true);

Luego en el suscriptor:

Messenger.Default.Register<PropertyChangedMessage<T>>(this, Handler);

donde T es el tipo de MyProperty.

Saludos Laurent


Otra forma de ver el problema es tener un servicio que devuelva el "usuario actualmente conectado".

La responsabilidad de manejar quién ha iniciado sesión es más responsabilidad de un servicio de todos modos, y los ViewModels son simples.

ViewModels debería existir solo para la Vista. Pero, al ser buenos ciudadanos, también pueden brindar ayuda a otros modelos de vista como Laurent y CodeWeasel.