中介模式用於不在視圖和視圖模型之間的視圖模型之間進行通信。
如果你想處理你的viewmodel的對話框,你可以使用對話服務,如this之一。
但是,當我想創建一個應用程序登錄對話框,我這樣做。
在app.xaml.cs
OnStartup()
- 創建loginview
- 創建登錄視圖模型
- 集的DataContext爲loginview到loginviewmodel
- 顯示loginview
- 編輯:loginviewmodel檢查密碼等等,如果它確定,那麼在loginviewmodel中設置狀態,例如IsValidUser = TRUE;
- 檢查結果
- 編輯:如果DialogResult的== 「OK」 和IsValidUser =真
- 打開主窗口
這裏我的一些代碼
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:這是隻有我的應用程序,我首先使用視圖的一部分。其餘的都是第一個viewmodel,這對我做mvvm時容易得多。
謝謝,但你如何檢查結果?我的意思是,用戶輸入正確的密碼,打開主窗口的代碼在哪裏以及它是如何被觸發的? – Bv202
用於檢查的代碼位於您的loginviewmodel中,打開mainwindow的代碼位於您的app.xaml.cs的OnStartup()方法中 – blindmeis