2016-12-19 32 views
2

多くの記事で、ビューモデル間の通信はメッセンジャーバスを使用して行う必要があります。メインViewmodelから子のviewmodelメソッドを呼び出す

私は、主なVMから子Vmメソッドを実行するのは悪いと考えていますか?

各TabItemが子ビューモデルであるTabControlを持つビューを持つとします。

アプリケーションを終了するときに、SaveSettings()子Vmメソッドを呼び出す設定を保存する必要があります。

私はそれが悪いコードであるかどうか、そしてその理由を知る必要があります。

main view 
-> closingEvent 
    -> call MainVM SaveAllSettings() 
    -> for (ChildVM childVM in allTabs) 
     --> childVM.SaveSettings() (public method) 
+0

イベントアグリゲータに見て、そしてEventAggregator.GetEvent .Publish(新SaveEvent())のような何かをした後、各ビューモデルを持っているEventAggregator.GetEvent .Subsribe(//いくつかここでは、イベントを保存するように、subsriberを持っています) – maximdumont

答えて

2

あなたのオブジェクトがすでに相互に結合している場合、すなわち、親ビューモデルがすでに強い参照に子ビューモデルを持っている場合は、それらの間の通信にメッセンジャーやイベントアグリゲータを使用する必要はありません。そうすれば、子供の任意の方法を直接呼び出すことができます(またはむしろ)。

これらの種類の親子関係が存在し、必ずしも悪いことではなく、貧弱なデザインの兆候であるとは限りません。それはすべてあなたのオブジェクトのリレーションシップに本当に依存します。

関連する問題