我是MVVM的新手并且使用MVVM Light学习它.
我在wpf中有一个带登录窗口的应用程序.当用户输入正确的凭据时,登录窗口应该关闭,并且应该打开一个新的MainWindow.登录部分已经正常工作,但如何打开新窗口并关闭当前(login.xaml)?
还必须为这个新的MainWindow提供一些参数.
任何人都可以把我放在正确的方向或提供一些信息吗?
因为你正在使用MvvmLight你可以使用MessengerClass(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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
并且在SubmitButonCommandLogInViewModel(例如)中发送关闭消息:
private RelayCommand _submitButonCommand;
public RelayCommand SubmitButonCommand
{
get
{
return _closeWindowCommand
?? (_closeWindowCommand = new RelayCommand(
() => Messenger.Default.Send(new NotificationMessage("CloseWindow"))));
}
}
Run Code Online (Sandbox Code Playgroud)
并使用相同的方法在之间LoginViewModel和之间发送Object OtherWindowViewModel,但这次需要发送Objects而不仅仅是NotificationMessage:在LoginViwModel中:
Messenger.Default.Send<YourObjectType>(new YourObjectType(), "Message");
Run Code Online (Sandbox Code Playgroud)
并在以下方面接收该对象OtherWindowViewModel:
Messenger.Default.Register<YourObjectType>(this, "Message", (yourObjectType) =>
//use it
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4019 次 |
| 最近记录: |