メインビューがデータテンプレートを使用してビューを切り替える戦略を定義しています。現在、3つのビューを切り替えることができます。
- ApplicationView:実際には、多くの異なるビューで構成されるビューであり、ほとんどの場合、タブ/ドッキングを使用して階層化されています。これは、アプリケーションデータを扱うビューです。
- LogInView:ユーザーのログインに使用されます。
- DialogView:ダイアログビューを表示するために使用されます。このビューは、データテンプレートを使用して、必要な適切なビューを選択します。
ダイアログビューを表示する必要がある場合は、メインビューの現在のビューとして設定するという考え方です。選択が完了すると、この情報はApplicationViewまたはApplicationViewの一部であるビューに渡されます。DialogViewが表示されている間、ApplicationViewはメモリから解放されないようにする必要があります。これは、ApplicationViewModelが引き続きデータを操作するためです(常にバックグラウンドで動作する必要があります)。
DataTemplatesを使用してこれを実現し、ContentControlのコンテンツをCurrentViewにバインドすることを考えています。
// in MainView
DataTemplate DataType="{x:Type vm:ApplicationViewModel}">
<vw:ApplicationView />
</DataTemplate>
.....
// in MainViewModel
public ViewModelBase CurrentView { get; set; }
基本的に、ダイアログにモーダルウィンドウを使用しないようにしています。
1)この戦略は大丈夫ですか、それとも私が気付いていない問題がいくつかありますか?
2)DialogViewに切り替えると(実際にはビューモデルを切り替えています)、ApplicationView / ApplicationViewModelはどうなりますか?ApplicationViewModelの参照をどこかに保存して、ガベージコレクションが行われないようにする必要がありますか?これはテストしていませんが、CurrentViewを設定すると、ViewModel/Viewの新しいインスタンスが作成される可能性があります。
3)2番目の質問に関連して、DataTemplatesを使用すると、以前に使用されていたView / ViewModelはどうなりますか?現在は別のview / viewmodelに置き換えられていますか?