MVVM パターンに従って WPF アプリケーションを設計しています。1つUserControl
に(実際、この状況は何度も発生します)、たとえば を含む非常に複雑であるため、TabControl
それらをいくつかのサブに分割したいと思いUserControl
ます。たとえば、「メイン」ビューでは、それを MainUC と呼びましょTabControl
うTabItem
。どちらもTabItem
実際には多くの UI 要素を含むUserControl
ため、SubUCA と SubUCB の 2 つを設計します。つまり、MainUC の XAML は次のようになります。
<TabControl Name="mainUC" Grid.Row="0" >
<TabItem Header="Sub UC A" Name="SubUC1">
<local:SubUCA />
</TabItem>
<TabItem Header="Sub UC B" Name="SubUC2">
<local:SubUCB />
</TabItem>
</TabControl >
しかし、私の質問は次のとおりです。これらのViewModelをどのように配置すればよいUserControl
ですか? 私が現在使用している 1 つの方法は、ViewModel クラス (MainUC_VM と呼ばれる) を 1 つだけ持つことであり、DataContext
MainUC の はこのクラス インスタンスに設定されます (依存性注入を使用していないことに注意してください。コード ビハインドでインスタンスを作成するだけです)。 MainUC の)。しかし、この方法では MainUC_VM クラスは MainUC と同じように非常に複雑になります。そのため、ViewModel もいくつかのクラスに分割したいと思います。たとえば、MainUC_VM クラスでは、このようなプロパティを持つことができます
public SubUCA_VM SubVM1 { get; set; }
public SubUCB_VM SubVM2 { get; set; }
ただし、依存性注入を使用していないため (私たちのチームは使用することを決定していないため)、DataContext
SubVM1 と SubVM2 をそれぞれ SubUC1 と SubUC2にする方法を教えてください。SubUCA と SubUCB のコード ビハインドでインスタンス化することはできません。これらは MainUC_VM のプロパティ メンバーとは異なるためです。
私が考えることができるいくつかの方法は、1) SubUCA_VM および SubUCB_VM クラスをシングルトンにする (これは、デフォルトで MEF などを使用する依存性注入と同じ動作に似ています)、または 2)EvengAggregator
オブジェクトのインスタンス化を通知するために使用します。しかし、私の意見では、どちらの方法でも不必要な複雑さが追加されているようです。MVVM を使用するには、依存性注入がほとんど必須であるということですか? DIを使わずにそれを達成する方法はありますか?