MVVM Light WPF 打开新 window
MVVM Light WPF open new window
我是 MVVM 的新手,正在使用 MVVM Light 学习它。
我在 wpf 中有一个带有登录名 window 的应用程序。当用户输入正确的凭据时,登录 window 应该关闭,并且应该打开一个新的 MainWindow。登录部分已经可以使用了,但是我怎样才能打开一个新的 window 并关闭当前的 (login.xaml)?
还必须为这个新的 MainWindow 提供一些参数。
谁能告诉我正确的方向或提供一些信息?
由于您使用的是 MvvmLight,因此您可以使用 Messenger
Class(mvvmlight 中的帮助程序 class),它用于在 ViewModel 之间和之间发送消息(通知 + 对象)视图模型和视图,在您的情况下,当登录在 LoginViewModel
中成功时(可能在提交按钮的处理程序中),您需要向 LoginWindow
发送消息以关闭自身并显示其他 windows:
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;
}
}
}
}
并在 SubmitButonCommand
的 LogInViewModel 中(例如)发送关闭消息:
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
);
我是 MVVM 的新手,正在使用 MVVM Light 学习它。
我在 wpf 中有一个带有登录名 window 的应用程序。当用户输入正确的凭据时,登录 window 应该关闭,并且应该打开一个新的 MainWindow。登录部分已经可以使用了,但是我怎样才能打开一个新的 window 并关闭当前的 (login.xaml)?
还必须为这个新的 MainWindow 提供一些参数。
谁能告诉我正确的方向或提供一些信息?
由于您使用的是 MvvmLight,因此您可以使用 Messenger
Class(mvvmlight 中的帮助程序 class),它用于在 ViewModel 之间和之间发送消息(通知 + 对象)视图模型和视图,在您的情况下,当登录在 LoginViewModel
中成功时(可能在提交按钮的处理程序中),您需要向 LoginWindow
发送消息以关闭自身并显示其他 windows:
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;
}
}
}
}
并在 SubmitButonCommand
的 LogInViewModel 中(例如)发送关闭消息:
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
);