MVVM Light WPF打开新窗口

时间:2015-01-05 14:47:56

标签: wpf mvvm-light

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

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

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

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

1 个答案:

答案 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"))));
    }
}

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

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

并在OtherWindowViewModel

中接收该对象
Messenger.Default.Register<YourObjectType>(this, "Message", (yourObjectType) =>
                                                           //use it 
                                                             );