Ueli Sonderegger
Ueli Sonderegger

Reputation: 153

MVVM light - how to access property in other view model

I'm using mvvm light to build a Silverlight application. Is there a code snippet that shows how to access a view model's property or command from within another view model or user control's code behind?

I guess it's simple, but I somehow missed something.

Ueli

Upvotes: 15

Views: 11720

Answers (3)

Patrice Calvé
Patrice Calvé

Reputation: 694

Another way to look at the problem is to have a service that returns the "currently logged in user".

The responsibility of handling who's logged in is more the responsibility of a service anyway, and the ViewModels stay simple.

ViewModels should exist only for the View. But, being good citizens, they can also provide help to other ViewModels like Laurent and CodeWeasel are showing.

Upvotes: 0

LBugnion
LBugnion

Reputation: 6662

Another way is to use the overload of RaisePropertyChanged that also broadcasts the change. You would do this:

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

Then in the subscriber:

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

where T is the type of MyProperty.

Cheers Laurent

Upvotes: 4

CodeWeasel
CodeWeasel

Reputation: 691

You could use the Messenger to do this: Send the user in the UserViewModel:

Messenger.Send<User>(userInstance);

would just send the user to anyone interested.

And register a recipient in your CardViewModel:

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

or you can also send a request from your CardViewModel for shouting the user:

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

And react on that in the UserViewModel:

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

(You better use an enum and not a string in a real scenario :) )

Perhabs you can even response directly but I can't check it at the moment.

Just check this out: Mvvm light Messenger

Upvotes: 34

Related Questions