我正在使用mvvm light来构建Silverlight应用程序。 是否有代码片段显示如何从另一个视图模型或用户控件的代码中访问视图模型的属性或命令?
我想这很简单,但我不知何故错过了什么。
Ueli
答案 0 :(得分:34)
您可以使用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 light Messenger
答案 1 :(得分:4)
另一种方法是使用同样广播更改的RaisePropertyChanged的重载。你会这样做:
RaisePropertyChanged(() => MyProperty, oldValue, newValue, true);
然后在订阅者中:
Messenger.Default.Register<PropertyChangedMessage<T>>(this, Handler);
其中T是MyProperty的类型。
干杯 劳伦
答案 2 :(得分:0)
另一种查看问题的方法是使用一个返回“当前登录用户”的服务。
无论如何,处理谁登录的责任更多是服务的责任,ViewModels保持简单。
ViewModel只应存在于View中。但是,作为好公民,他们还可以为Laurent和CodeWeasel等其他ViewModel提供帮助。