我正在使用 mvvm light 来构建 Silverlight 应用程序。是否有代码片段显示如何从另一个视图模型或用户控件的代码中访问视图模型的属性或命令?
我想这很简单,但我不知何故错过了一些东西。
于力
我正在使用 mvvm light 来构建 Silverlight 应用程序。是否有代码片段显示如何从另一个视图模型或用户控件的代码中访问视图模型的属性或命令?
我想这很简单,但我不知何故错过了一些东西。
于力
您可以使用 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);
});
(您最好在实际场景中使用枚举而不是字符串:))
也许您甚至可以直接回复,但我目前无法检查。
看看这个:Mvvm light Messenger
另一种方法是使用也广播更改的 RaisePropertyChanged 的重载。你会这样做:
RaisePropertyChanged(() => MyProperty, oldValue, newValue, true);
然后在订阅者中:
Messenger.Default.Register<PropertyChangedMessage<T>>(this, Handler);
其中 T 是 MyProperty 的类型。
干杯劳伦特
另一种看待问题的方法是让服务返回“当前登录的用户”。
无论如何,处理谁登录的责任更多的是服务的责任,并且 ViewModel 保持简单。
ViewModel 应该只存在于 View 中。但是,作为好公民,他们也可以为 Laurent 和 CodeWeasel 等正在展示的其他 ViewModel 提供帮助。