0

kendo mvvm を使用して異なるビューモデルの 2 つのプロパティを互いにバインドする方法はありますか、それとも変更イベントのコードを自分で記述する必要がありますか?

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);
}

このメッセージを送信すると、MainViewModel のプロパティなどを変更するために使用できる UpdateView(loggedInBoolean) メソッドが起動されます。

概要: Mediator は、viewModel 間でメッセージを渡します。プロパティを変更したい、関数を起動したいなどのビューモデルをメッセージに登録します。次に、別のビューモデルが、その特定のメッセージに登録されているすべてのクラスにメッセージを送信できます。

それが役立つことを願っています。

于 2014-06-03T14:38:40.227 に答える