如何在MVVM Light中调用另一个视图模型构造函数

时间:2015-03-31 16:36:09

标签: c# wpf mvvm viewmodel mvvm-light

我有一个验证用户登录的方法。如果用户正确登录,我想调用两个视图模型结构,以防用户已登录。下面是我的示例代码。实现这一目标的最佳方法是什么?

发送视图模型:

        if (UserName == userName && Password == password)
        {
            ProjectManager.Instance.IsAdmin = true;
            isLoggedIn = true;
            IsLoggedIn = true;
            ValidLoginImage();
            LoginStatus = "Admin Logged In";
            MessengerInstance.Send(true);

        }

接收视图模型:

    private void RegisterForMessages()
    {
        MessengerInstance.Register<bool>(this, UpdateEnabled);
    }

    private void UpdateEnabled(bool b)
    {
        IsLoggedIn = b;
    }

registerformessage方法永远不会被调用。

1 个答案:

答案 0 :(得分:1)

由于您已经在使用MvvmLight,我只是发送一条消息,其中包含一个调用视图模型中的方法的布尔值来更新它。在视图模型中注册需要更新的消息。然后它将等待&#34;确定我已登录&#34; boolean,然后运行一些更新IsEnabled属性的方法。将其放在需要更新的视图模型中:

/// <summary>
        /// Listen for messages from other ViewModels
        /// </summary>
        private void RegisterForMessages()
        {
            MessengerInstance.Register<bool>(this, UpdateMyStuff);
        }

private void UpdateMyStuff(bool b)
        {
            IsEnabled=b;
        }

然后在用户登录时发送消息:

//在这里登录成功代码......

MessengerInstance.Send(true);  //or your IsLoggedIn property

如果此视图已注销或其他任何内容,您可以发送false。

这将让您的视图模型知道用户是否已登录的状态,并允许您相应地更新。显然,你需要确保实现INotifyPropertyChanged等。这已经是MVVMLight的所有部分。如果你的viewmodel实现了MvvmLight的ViewModelBase,那么它已经为你准备好了。