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