我是MVVM的新手,正在使用MVVM Light学习。
我有一个WPF应用程序,其中包含一个登录窗口。当用户输入正确的凭据时,登录窗口应关闭并打开一个新的MainWindow。登录部分已经工作了,但是如何打开一个新窗口并关闭当前窗口(login.xaml)呢?
此外,必须向这个新的MainWindow提供一些参数。
有人能为我指明正确的方向或提供一些信息吗?
我是MVVM的新手,正在使用MVVM Light学习。
我有一个WPF应用程序,其中包含一个登录窗口。当用户输入正确的凭据时,登录窗口应关闭并打开一个新的MainWindow。登录部分已经工作了,但是如何打开一个新窗口并关闭当前窗口(login.xaml)呢?
此外,必须向这个新的MainWindow提供一些参数。
有人能为我指明正确的方向或提供一些信息吗?
由于您正在使用MvvmLight,因此可以使用Messenger
类(mvvmlight中的助手类),该类用于在ViewModel之间以及ViewModel和View之间发送消息(通知+对象)。在您的情况下,当登录成功时,需要在LoginViewModel
中发送一条消息(可能在提交按钮的处理程序中),以关闭LoginWindow
并显示其他窗口:
LogInWindow代码后台
public partial class LogInWindow: Window
{
public LogInWindow()
{
InitializeComponent();
Closing += (s, e) => ViewModelLocator.Cleanup();
Messenger.Default.Register<NotificationMessage>(this, (message) =>
{
switch (message.Notification)
{
case "CloseWindow":
Messenger.Default.Send(new NotificationMessage("NewCourse"));
var otherWindow= new OtherWindowView();
otherWindow.Show();
this.Close();
break;
}
}
}
}
private RelayCommand _submitButonCommand;
public RelayCommand SubmitButonCommand
{
get
{
return _closeWindowCommand
?? (_closeWindowCommand = new RelayCommand(
() => Messenger.Default.Send(new NotificationMessage("CloseWindow"))));
}
}
使用相同的方法在LoginViewModel
和OtherWindowViewModel
之间发送对象,不同之处在于这次您需要发送对象而不仅仅是NotificationMessage
:
在LoginViewModel中:
Messenger.Default.Send<YourObjectType>(new YourObjectType(), "Message");
并在 OtherWindowViewModel
中接收该对象:
Messenger.Default.Register<YourObjectType>(this, "Message", (yourObjectType) =>
//use it
);