Как вызвать конструктор моделей другого вида в 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 ответ

Решение

Поскольку вы уже используете MvvmLight, я просто отправил бы сообщение, содержащее логическое значение, которое вызывает метод в модели представления для его обновления. Зарегистрируйтесь для получения сообщений в модели представления, которая нуждается в обновлении. Затем он будет ожидать логического значения "хорошо, я вошел в систему", затем запустим какой-нибудь метод, который обновит ваше свойство 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, он уже будет готов для вас.

Другие вопросы по тегам