MVVM灯 – 如何访问其他视图模型中的属性

我使用mvvm light来构buildSilverlight应用程序。 是否有代码片段,展示了如何从另一个视图模型或用户控件的代码中访问视图模型的属性或命令?

我想这很简单,但是我有点遗漏了一些东西。

Ueli

您可以使用Messenger来执行此操作:在UserViewModel中发送用户:

Messenger.Send<User>(userInstance); 

只会将用户发送给任何感兴趣的人。

在CardViewModel中注册一个收件人:

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

或者您也可以发送您的CardViewModel呼叫用户的请求:

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

并对UserViewModel做出反应:

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

(你最好使用枚举,而不是真正的场景:))

Perhabs,你甚至可以直接回应,但我目前无法检查。

只要看看这个: Mvvm光信使

另一种方法是使用也广播更改的RaisePropertyChanged的重载。 你会这样做:

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

然后在订阅者:

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

其中T是MyProperty的types。

欢呼洛朗

另一种看问题的方法是有一个返回“当前login用户”的服务。

处理谁login的责任更多地是服务的责任,ViewModels保持简单。

ViewModels应该只存在于View中。 但是,作为一个好公民,他们也可以为Laurent和CodeWeasel等其他ViewModel提供帮助。