Я пытаюсь реализовать функцию выхода из приложения Windows Store, над которым я работаю, и который использует Caliburn Micro.Сброс ViewModels, созданный Caliburn Micro
Проблема, с которой я сталкиваюсь, заключается в том, что если пользователь выходит из системы, а затем снова регистрируется как другой пользователь, объекты ViewModels, созданные при запуске приложения, все еще существуют в памяти и имеют ссылки на старые модели. Следовательно, показы отображаются с устаревшими данными первого пользователя.
Чтобы лучше объяснить себе:
public class LoginViewModel : Screen
{
private User _model;
// Property gets initialised only on instantiation of ViewModel class
public User Model
{
get { return _model; }
set
{
if (Equals(value, _model)) return;
_model = value;
NotifyOfPropertyChange(() => Model);
}
}
// ViewModel constructor - instantiated once only by Caliburn on startup
public LoginHeaderViewModel(IAuthService authService)
{
Model = _authService.User;
}
}
Когда мое приложение первые запуски, Caliburn автоматически экземпляр LoginViewModel
и запустить его конструктор, который, в свою очередь, извлекает вошедшего в систему пользователя. После того, как пользователь выйдет из системы, а другой пользователь входит в систему, LoginViewModel
не создается снова во время выполнения, поскольку он уже существует. Свойство Model
не переоценивается и, следовательно, связанный с ним просмотр не обновляется.
Я попытался воссоздать Caliburn's WinRTContainer
при выходе из системы, но приложение начало вести себя смешно. Я был подозрительным в том, чтобы спускать этот подход в любом случае, так что пока не слишком много в него вникал.
'OnDeactivate' позволит мне очистить все модели, которые у меня есть. Однако мне нужно перезагрузить или повторно инициализировать мои модели. Я думаю, это можно сделать в 'OnActivate' – Hady