過度に複雑な回答を作成せず、DelegateCommand (s) やWindowManager (s) などの明らかに新しい概念を含めずに、これは多くの異なる「サブ ウィンドウ」を表示するフルスクリーン アプリケーションの基本的な例です ( Windows 自体ではなく、むしろ UserControls)
メインウィンドウ:
<Window x:Class="FullScreenAppSample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowState="Maximized"
WindowStyle="None">
</Window>
コードビハインド:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void ShowLogin()
{
var loginview = new LoginView();
this.Content = loginview;
}
private void ShowMenu()
{
var menu = new MenuView();
this.Content = menu;
}
}
ログインビュー:
<UserControl x:Class="FullScreenAppSample.Login.LoginView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- your login screen UI here -->
</UserControl>
メニュービュー:
<UserControl x:Class="FullScreenAppSample.Menu.MenuView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<!-- your Menu UI here -->
</UserControl>
これは、「ビュー ファースト」アプローチと呼ばれるものであり、ビューが他のビューをインスタンス化し、それらを可視化する責任を負うことによって、アプリケーションの「フロー」を指示します。
そうは言っても、私はあなたの主張に対処するために少し時間を割きます
誰もが異なる方法でそれを処理します
はい。WPF アプリケーションを作成するための主流のアプローチは、 Martin Fowler の Presentation Model のWPF 固有バージョンとして考えられたMVVMと呼ばれるものです。ただし、 MVVM Light、Caliburn.Micro、Microsoft のPrismなどの多くのMVVM Frameworksとともに、MVVM には多くの解釈とさまざまなバージョンが存在します(他にも多数あります)。
これらの各フレームワークは、大規模で複雑な WPF アプリケーションの開発を容易にするための基本的なツール (基本クラス、ヘルパー クラス、サービス、抽象化、イベント アグリゲーターなど) を提供します。
結論: View や ViewModel のインスタンス化 / WPF での管理などを処理する決定的な「正しい方法」はありません。これは、MVVM フレームワークの選択と、テスト容易性の必要性など、プロジェクトの詳細に依存します。
私は個人的に、いくつかの異なるフレームワークからさまざまなパーツとコンポーネント (および概念も) を取得し、独自の ViewModel ファースト MVVM アプローチを構成しました。時間をかけてプロジェクトの要件を分析し、これらのいずれかを使用するかどうかを検討することをお勧めします.