当用户输入正确的密码时,应关闭登录窗口并打开主窗口。我想从ViewModel执行此操作,但是,ViewModel可能对该视图一无所知。
我搜索了很多,并且显然最好的方法是使用中介模式。我理解这种模式是如何工作的,但在这种情况下如何有效地使用它?
调解员需要:ViewModel需要对介体的引用。
我需要在哪里创建调解员?我无法在ViewModel中执行此操作,因为我无法设置对视图的引用。在视图中创建中介是一个选项,因为我可以从DataContext属性中获取ViewModel,但是我仍然需要将中介传递给ViewModel,这只会使代码更加困难。
如何正确使用中介来打开/关闭窗口?
答案 0 :(得分:1)
介体模式用于视图模型之间的通信,而不是视图和视图模型之间的通信。
如果您想从视图模型处理对话框,可以使用this之类的对话服务。
然而,当我想创建一个应用程序登录对话框时,我会这样做。
在app.xaml.cs OnStartup()
中这里是我的一些代码
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时要容易得多。