2009-06-02 9 views
0

Hy男!Onyxを使用したMVVMの親/子ビューモデル関係のベストプラクティス?

現在MVVMをOnyxフレームワーク経由で使用している、少しWPFプロジェクトに取り組んでいます。

マイcurrentviewアーキテクチャは、このようなものです:

<DockPanel> 
    <Menu DockPanel.Dock="Top" Background="#cecece"> 
     <!-- Menu --> 
    </Menu> 

    <Grid> 
     <views:TranslationView x:Name="translationView" /> 
    </Grid> 
</DockPanel> 

私が今持っている問題は、2つのviewmodels間の関係を実装する方法です。私は現在、TranslationViewに親ViewModelへのリンクを持たない独自のViewModelを持っています。

問題は、MainViewでファイルを開き、内容を解析してTranslationViewで表示できるようにすることです。これを行うための推奨される方法はありますか?

TranslationViewModelをMainViewModelのプロパティとして使用し、それをTranslationView用のDataContextとして使用することを考えましたが、Onyxのモデルに対してViewModelをタイプ(オブジェクトではありません)参照で定義するようです。

答えて

0

Onyxには「オブジェクト(オブジェクトではない)参照を介してViewModelを定義するモデル」がありません。 ViewModel添付プロパティにオブジェクト参照を割り当てることができます。実際、このプロパティはObject型であり、型変換を使用してTypeインスタンスを指定されたTypeのオブジェクトインスタンスに変更します。これは便利です。任意の方法で作成されたオブジェクト参照を割り当てるだけで自由です。

ほとんどの質問と同様に、問題を解決する方法はいくつもあります。オニキスの設計に反していると思ったためにあなたが言いましたが、解雇された解決策は、うまくいくかもしれませんが、より緊密な結合を作り出すために、私は躊躇していました。もう1つの解決策は、Event Agregatorパターンを使用して、ビュー間を非接続で通信することです。あるいは、よりサービス指向のアプローチを利用することもできます。たとえば、通常、密接に結合された設計でApplication.Currentに通常アクセスする場所にあるIApplicationサービスを定義します。ロードされたファイルの内容を保持するためにこのサービスにプロパティを提供し、そのプロパティが変更されたことをTranslationViewModelが認識できるように、サービスでINotifyPropertyChangedを公開することができます。

関連する問題