Silverlight MVVM light-如何访问其他视图模型中的属性

Silverlight MVVM light-如何访问其他视图模型中的属性,silverlight,mvvm,mvvm-light,Silverlight,Mvvm,Mvvm Light,我正在使用MVVMLight构建Silverlight应用程序。 是否有代码片段显示如何从另一个视图模型或用户控件的代码中访问视图模型的属性或命令 我想这很简单,但不知为什么我错过了一些东西 Ueli您可以使用Messenger执行以下操作: 在UserViewModel中发送用户: Messenger.Send<User>(userInstance); Messenger.Register<User>(this, delegate(User curUser){_cur

我正在使用MVVMLight构建Silverlight应用程序。 是否有代码片段显示如何从另一个视图模型或用户控件的代码中访问视图模型的属性或命令

我想这很简单,但不知为什么我错过了一些东西


Ueli

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

Messenger.Send<User>(userInstance);
Messenger.Register<User>(this, delegate(User curUser){_curUser = curUser;});
Messenger.Register<String>(this, delegate(String msg)
{
if(msg == "Gimme user")
Messenger.Send<User>(userInstance);
});
Messenger.Send(userInstance);
只需将用户发送给感兴趣的任何人

并在您的CardViewModel中注册收件人:

Messenger.Send<User>(userInstance);
Messenger.Register<User>(this, delegate(User curUser){_curUser = curUser;});
Messenger.Register<String>(this, delegate(String msg)
{
if(msg == "Gimme user")
Messenger.Send<User>(userInstance);
});
Messenger.Register(这个,委托(用户curUser){{u curUser=curUser;});
或者,您也可以从CardViewModel向用户发送请求:

Messenger.Send<String, UserViewModel>("Gimme user");
Messenger.Send(“给我用户”);
并在UserViewModel中对此做出反应:

Messenger.Send<User>(userInstance);
Messenger.Register<User>(this, delegate(User curUser){_curUser = curUser;});
Messenger.Register<String>(this, delegate(String msg)
{
if(msg == "Gimme user")
Messenger.Send<User>(userInstance);
});
Messenger.Register(此,委托(字符串消息)
{
如果(消息==“给我用户”)
Send(userInstance);
});
(在实际场景中,最好使用枚举而不是字符串:)

也许你甚至可以直接回应,但我现在无法核实


只需检查一下:

另一种方法是使用RaisePropertyChanged的重载,该重载也会广播更改。您可以这样做:

RaisePropertyChanged(() => MyProperty, oldValue, newValue, true);
然后在订阅服务器中:

Messenger.Default.Register<PropertyChangedMessage<T>>(this, Handler);
Messenger.Default.Register(这个,处理程序);
其中T是MyProperty的类型

干杯
Laurent

另一种看待问题的方法是使用返回“当前登录用户”的服务

不管怎样,处理谁登录的责任更多的是服务的责任,ViewModels保持简单


ViewModels应该只存在于视图中。但是,作为好公民,他们也可以为其他视图模型提供帮助,如Laurent和CodeWeasel。这取决于控件的实现。您是在父视图下的视图之间共享ViewModel,还是只是试图在两个独立视图之间共享属性/命令?相关视图可以嵌套在不同的视图中,但它依赖于需要能够从独立ViewModel访问属性的ViewModel。在我的具体案例中,它是一个CardViewModel,需要获取当前登录用户的信息(在独立的UserViewModel中处理和存储)才能调用Web服务。很好,这就是我所需要的。(现在看来很明显,这让我觉得自己像个白痴……)。我们巴西的天气潮湿。