我是MVVM的新手并使用MVVM Light学习它。
我在wpf中有一个带登录窗口的应用程序。当用户输入正确的凭据时,登录窗口应该关闭,并且应该打开一个新的MainWindow。登录部分已经正常工作,但如何打开新窗口并关闭当前(login.xaml)?
还必须为这个新的MainWindow提供一些参数。
任何人都可以把我放在正确的方向或提供一些信息吗?
答案 0 :(得分:5)
因为您正在使用MvvmLight,所以您可以使用Messenger
类(mvvmlight中的帮助程序类),它用于在ViewModel之间以及ViewModel和Views之间发送消息(通知+对象),在您登录的情况下成功进入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;
}
}
}
}
并且在LogInViewModel的SubmitButonCommand
中(例如)发送关闭消息:
private RelayCommand _submitButonCommand;
public RelayCommand SubmitButonCommand
{
get
{
return _closeWindowCommand
?? (_closeWindowCommand = new RelayCommand(
() => Messenger.Default.Send(new NotificationMessage("CloseWindow"))));
}
}
并使用相同的方法在LoginViewModel
和OtherWindowViewModel
之间发送对象,但这次您需要发送对象而不仅仅是NotificationMessage
:
在LoginViwModel中:
Messenger.Default.Send<YourObjectType>(new YourObjectType(), "Message");
并在OtherWindowViewModel
:
Messenger.Default.Register<YourObjectType>(this, "Message", (yourObjectType) =>
//use it
);