gpt4 book ai didi

wpf - MVVM Light WPF 打开新窗口

转载 作者:行者123 更新时间:2023-12-04 17:04:19 25 4
gpt4 key购买 nike

我是 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;
}
}
}
}

并在 LogInViewModel 的 SubmitButonCommand 中(例如)发送结束消息:

private RelayCommand _submitButonCommand;
public RelayCommand SubmitButonCommand
{
get
{
return _closeWindowCommand
?? (_closeWindowCommand = new RelayCommand(
() => Messenger.Default.Send(new NotificationMessage("CloseWindow"))));
}
}

并使用相同的方法在 LoginViewModelOtherWindowViewModel 之间发送对象,除了这次您需要发送对象而不仅仅是 NotificationMessage:在 LoginViwModel 中:

 Messenger.Default.Send<YourObjectType>(new YourObjectType(), "Message");

并在 OtherWindowViewModel 中接收该对象:

Messenger.Default.Register<YourObjectType>(this, "Message", (yourObjectType) =>
//use it
);

关于wpf - MVVM Light WPF 打开新窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27781903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com