他の多くのビジネス オブジェクトで構築されたビジネス オブジェクトを表示したいシナリオがあるとします。つまり、階層が深いとします。
データを表示するには、masterDetail タイプのビューを使用したいと思いますが、多くのレベルを使用して、データをより深く掘り下げることができます。
したがって、オブジェクトのルートにあるリストから項目を選択し、そのプロパティの詳細ビューを表示してから、その詳細ビューから項目を選択してその詳細ビューなどを表示する必要があります。
データを操作していない場合は、モデルに直接バインドするだけでよいため、深い階層内のモデルごとに viewModel を作成する必要はありません。
データを操作する場合は、ビジネス オブジェクト全体とその子孫をビュー モデルでラップし、それにバインドして、特定のロジックを実行するコマンドを追加できるようにします。
しかし、特定のレベルでのみデータを操作したい場合はどうすればよいでしょうか? XAML や codeBehind からモデルを直接操作しようとすると面倒です。それでも、すべてを ViewModel でラップするのは大変な作業です。
特定の時点でビューモデルを作成するためにコンバーターを使用するだけだと考えています
<DisplayControl DataContext="{Binding A}">
<DisplayControl DataContext="{Binding B}">
<InteractionControl DataContext="{Binding C, Converter{ConvertModelToViewModel}}">
</InteractionControl >
</DisplayControl >
</DisplayControl >
しかし、それらのビューモデルでクリーンアップを実行する必要がある場合はどうすればよいでしょうか? イベントへの登録解除など。同じアイテムを行ったり来たりするたびに、同じモデルの新しいビューモデルが作成されます。ガベージ コレクションに依存したくありません。ビューモデルを保持することは、実行内容によってはコストがかかる可能性があり、GC も発生しない可能性があるためです (静的クラスのイベントに登録している場合など)。弱いイベントを使用すると GC に役立ちますが、高価な viewModel を必要以上に長く保持する場合には、それでも役に立ちません。