Выйдите из системы и вернитесь к экрану входа в приложении Prism. - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть последовательность входа в систему, работающая в приложении WPF на основе призмы, которое показывает экран входа в систему до отображения главного окна. в моем классе Bootstrapper метод InitializeShell выглядит следующим образом

    protected override void InitializeShell()
    {
        var logon = new LogOnView();
        bool? res = logon.ShowDialog();
        if (!res ?? true)
        {
            Application.Current.Shutdown(1);
        }
        else
        {
            Application.Current.MainWindow.Show();
        }
    }

, и это работает, как ожидалось, и это нормально, если пользователь входит в систему, использует приложение и затем закрывает его.

Теперь я хочу позволить пользователю выйти из системы или прагматически заставить его выйти из системы.

Если я использую код, аналогичный приведенному выше, в MainWindowViewModel, чтобы попытаться убить MainWindow и показать LogOnView, который неработай.

Такое ощущение, что мне нужен какой-то диспетчер окон, чтобы показать и скрыть 2 экрана, которые инициализируются после того, как загрузчик сделал свое дело, или чтобы загрузчик ответил на событие из MainWindow или чего-то еще.

Каков наилучший способ достичь этого?

1 Ответ

0 голосов
/ 11 ноября 2019

Такое ощущение, что мне нужен какой-то диспетчер окон, чтобы показать и скрыть 2 экрана

Поведение по умолчанию - показать одну оболочку, и в основном все происходит там. Если вам нужно более одной «оболочки» (например, окно входа в систему и обычная оболочка), вы должны расширить код. Менеджер окон, который вызывается из InitializeShell, звучит хорошо для меня.

// in the bootstrapper    
protected override void InitializeShell()
{
    Container.Resolve<IWindowManager>().SwitchToLoginWindow();
}

// from the login window
private void OnCredentialsValidated()
{
    _windowManager.SwitchToShell();
}

// somewhere else
private void OnLogOut()
{
    _windowManager.SwitchToLoginWindow();
}

Менеджер окон создает и хранит окно входа в систему и оболочку, показывает одно и скрывает другое. Я бы постарался не разрушать и не воссоздавать оболочку, чтобы не сбивать с толку такие вещи, как менеджер региона.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...