MVVM Light WPF打开新窗口

Kai*_*zer 3 wpf mvvm-light

我是MVVM的新手并且使用MVVM Light学习它.

我在wpf中有一个带登录窗口的应用程序.当用户输入正确的凭据时,登录窗口应该关闭,并且应该打开一个新的MainWindow.登录部分已经正常工作,但如何打开新窗口并关闭当前(login.xaml)?

还必须为这个新的MainWindow提供一些参数.

任何人都可以把我放在正确的方向或提供一些信息吗?

Sam*_*Dev 5

因为你正在使用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)