0

みんな!

私は現在、Onyx フレームワークを介して MVVM を使用する小さな WPF プロジェクトに取り組んでいます。

私の現在のビューアーキテクチャは次のようなものです:

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

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

私が今抱えている問題は、2 つのビューモデル間の関係を実装する方法です。私は現在、基本的に TranslationView に独自の ViewModel を持たせ、親 ViewModel へのリンクはありません。

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

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

4

1 に答える 1

0

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

ほとんどの質問と同様に、問題を解決する方法はいくつもあります。あなたが言及したが、Onyxの設計に反すると思ったために却下された解決策は、うまくいく可能性がありますが、より緊密な結合を作成するという理由だけで、使用することを躊躇します。別の解決策は、イベントアグリゲーターパターンを利用して、切断された方法でビュー間で通信することです。または、よりサービス指向のアプローチを利用することもできます。たとえば、私は通常、緊密に結合された設計で、通常はApplication.Currentにアクセスする場所にあるIApplicationサービスを定義します。ロードされたファイルの内容を保持するためにこのサービスにプロパティを提供し、サービスでINotifyPropertyChangedを公開して、TranslationViewModelがプロパティが変更されたことを認識できるようにすることができます。

于 2010-06-15T17:44:34.027 に答える