Связывание свойств разных моделей представления друг с другом

Есть ли способ связать два свойства разных моделей представления друг с другом, используя 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в зависимости от того, вошел ли пользователь в систему или нет. Можно пойти немного дальше, говоря о группах пользователей и привилегиях. Может ли кто-нибудь дать мне пример или другой подход, если это неправильный подход и/или, может быть, плохая практика?


person Kevkong    schedule 03.06.2014    source источник


Ответы (1)


Привет, я думаю, что шаблон посредника может быть тем, что вы ищете, он идеально подходит для отправки сообщений между моделями представления без прямой ссылки на них. В 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.

Резюме: посредник передает сообщения между моделями представления. ViewModel, в котором вы хотите изменить свойство, запустить функцию и т. д., регистрируется в сообщении. Затем другая модель представления может отправить сообщение всем классам, которые зарегистрированы для этого конкретного сообщения.

Надеюсь, это поможет.

person MechaRyRy    schedule 03.06.2014
comment
Я принял это как ответ, потому что считаю это хорошим подходом и, вероятно, буду использовать этот шаблон, хотя я надеялся, что в kendoUI реализовано что-то подобное, и кто-нибудь может сказать мне, как его использовать. Спасибо за подсказку! - person Kevkong; 02.07.2014