0

有没有办法使用 kendo mvvm 将不同视图模型的两个属性相互绑定,还是我必须自己编写更改事件的代码?

UserViewModel = {
    init: function(e) {
    },
    show: function(e) {
    },
    model: {
       isLoggedIn: kendo.observable(false)
    }
}

OtherContextViewModel = {
    init: function(e) {
    },
    show: function(e) {
    },
    model: {
       UserIsLoggedIn: //bind to isLoggedIn of the UserViewModel
    }
}

我尝试这样做的原因:我想OtherContext根据用户是否登录来隐藏和显示几件事。在谈论用户组和权限时可能会更进一步。如果这不是正确的方法和/或可能是不好的做法,谁能给我一个例子或另一种方法?

4

1 回答 1

2

嗨,我认为中介者模式可能是您正在寻找的,它非常适合在视图模型之间发送消息而不直接引用它们。CodeProject 有一个教程展示了如何实现中介者模式。

http://www.codeproject.com/Articles/35277/MVVM-Mediator-Pattern

假设我们有 2 个 ViewModel: 1. LoginViewModel 2. MainViewModel

我们将 MainViewModel 注册到中介消息 UserLoggedIn

Mediator.Instance.Register(
   (Object o) =>
   {
     UpdateView(o as loggedInBoolean);
   }, Mediator.ViewModelMessages.UserLoggedIn);

当用户通过 LoginViewModel 登录时,我们向中介者消息 UserLoggedIn 发送消息。

public void LoggingIn()
{     
Mediator.Instance.Notify(Mediator.ViewModelMessages.UserLoggedIn, null);
}

发送此消息将触发 UpdateView(loggedInBoolean) 方法,然后您可以使用该方法更改 MainViewModel 中的任何属性等。

摘要:Mediator 在 vi​​ewModel 之间传递消息。您想要更改属性、启动功能等的 viewModel 会注册到消息中。然后,另一个 viewModel 可以向注册到该特定消息的所有类发送消息。

希望有帮助。

于 2014-06-03T14:38:40.227 回答