メディエーター パターンは、ビューとビューモデルの間ではなく、ビューモデル間の通信に使用されます。
ビューモデルからダイアログを処理したい場合は、このようなダイアログ サービスを使用できます。
それでも、アプリケーションのログインダイアログを作成したいときは、このようにします。
app.xaml.cs で OnStartup()
- ログインビューを作成する
- ログイン ビューモデルを作成する
- loginview の datacontext を loginviewmodel に設定します
- ログインビューを表示
- 編集: loginviewmodel はパスワードなどを確認します。OK の場合、IsValidUser=true などの状態が loginviewmodel に設定されます。
- チェック結果
- 編集: dialogresult == "OK" および IsValidUser=true の場合
- 開いているメインウィンドウ
ここに私のコードのいくつか
protected override void OnStartup(StartupEventArgs e)
{
//...
ShutdownMode = ShutdownMode.OnExplicitShutdown;
var vm = new LoginVM();
var loginwindow = new LoginWindow();
loginwindow.DataContext = vm;
if (!result.HasValue || !result.Value || !IsValidUser)
{
Shutdown();
return;
}
//...
var mainWindow = new MainWindow(new MainWindowViewModel(vm.Settings));
mainWindow.Loaded += (sender, args) => splashScreen.Close();
this.MainWindow = mainWindow;
ShutdownMode = ShutdownMode.OnMainWindowClose;
this.MainWindow.Show();
}
ps: これは、ビューを最初に使用するアプリの唯一の部分です。残りは最初にすべてビューモデルです。これは、mvvm を実行するときにはるかに簡単です。