Как повторно инициализировать одноэлементные страницы и модели представления при выходе пользователя из системы и входе C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как повторно инициализировать одноэлементные страницы и модели представления при выходе пользователя из системы и входе

Сообщение Anonymous »

Описание проблемы
Я разрабатываю приложение MAUI, которое использует вкладки оболочки наряду с процессом входа в систему. Страница каждой вкладки и соответствующая ViewModel регистрируются как синглтоны. При первоначальной загрузке страницы используют метод OnAppearing для вызова метода инициализации из ViewModel, который извлекает данные из локальной базы данных (с использованием LiteDb) и загружает их в наблюдаемую коллекцию для просмотра пользователем.
Возникла проблема
Приложение позволяет текущему пользователю выйти из системы следующим образом:

Код: Выделить всё

try
{
SecureStorage.Default.RemoveAll(); // Clears the session of the logged-in user
await _repositories.ClearAsync(); // Clears all data created by the current user

await Shell.Current.GoToAsync($"//{nameof(SignInUpPage)}");
}
catch (Exception)
{
Toast.Show("Something went wrong");
}
После перехода обратно на страницу SignInUpPage и повторного входа в систему данные предыдущего сеанса по-прежнему отображаются на главных страницах вкладок. Это связано с тем, что страницы и модели представления регистрируются как одиночные.
Вопрос
Как лучше всего обеспечить что эти страницы и модели представления уничтожаются или повторно инициализируются при новом входе в систему? Цель состоит в том, чтобы иметь свежие экземпляры, которые соответствующим образом перезагружают данные, когда пользователь входит в систему после выхода из системы.
Настройка страницы
В MainShellPage.xaml у меня есть следующее:

Код: Выделить всё







 Another tabs .. 
Когда LoadingPage запускается в своей собственной модели представления, он решает, аутентифицирован ли пользователь или нет.
Если пользователь аутентифицирован, он переходит к:

Код: Выделить всё

 await Shell.Current.GoToAsync($"//{nameof(MainShellPage)}")
Иначе

Код: Выделить всё

await Shell.Current.GoToAsync($"//{nameof(SignInUpage)}")
Причина загрузки страницы:
  • решить, что пользователь аутентифицирован
    если инициализация данных по умолчанию еще не была выполнена, данные извлекаются из веб-API и сохраняются в локальную базу данных.
  • если пользователь работал над чем-то, и приложение было закрыто здесь он проверяет наличие кэшированных данных и загружает приложение для продолжения работы.


Подробнее здесь: https://stackoverflow.com/questions/787 ... login-in-a
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»