代码之家  ›  专栏  ›  技术社区  ›  yams

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

  •  1
  • yams  · 技术社区  · 10 年前

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

    发送视图模型:

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

    registerformmessage方法从未被调用。

    1 回复  |  直到 10 年前
        1
  •  2
  •   Theodosius Von Richthofen    10 年前

    由于您已经在使用MvvmLight,我只需发送一条包含布尔值的消息,该布尔值调用视图模型中的方法来更新它。请在视图模型中注册需要更新的消息。然后它将等待“ok i’m logged in”布尔值,然后运行一些方法来更新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的一部分了。如果您的视图模型实现了MvvmLight的ViewModelBase,那么它已经为您准备好了。