Как выполнить вход/выход из системы в Caliburn.Micro?

Я новичок в Caliburn.Micro, и мне интересно, как лучше всего обрабатывать циклы входа/выхода пользователей в моем приложении. Я видел в Интернете несколько предложений по реализации этого с использованием пустого представления Shell -, которое переключается между LoginView и основным представлением приложения, каждое из которых, конечно, имеет пользовательскую модель представления.

Мне не очень нравится это решение, потому что для меня это 2 отдельных окна с очень разными свойствами (Заголовок, Значок, Размер )и кажется нечистым решением два изменения одного окна, чтобы оно выглядело как другое. Другая проблема заключается в том, что окно входа происходит из служебной библиотеки, которую я не контролирую и которая не использует Caliburn.Micro, это простое старое окно, которое дает мне событие, когда пользователь нажимает «Войти».

Я также видел предложения отображать этот диалог в методе запуска Bootstrapper, но проблема, которую я вижу в этом, заключается в том, что пользователь может выбрать «Выход» из приложения, которое должно снова отображать диалоговое окно входа. Мне кажется неправильным обрабатывать переключение между представлениями в Bootstrapper.

Я хотел бы иметь какой-то ApplicationViewModel или ApplicationController, который работает как проводник Caliburn, но вместо переключения между представлениями внутри окна он должен переключаться между LoginWindow и MainWindow, а также должен обрабатывать закрытие всего приложения (. ], что также требует выхода из системы ). При активации он будет отображать LoginWindow, обрабатывать событие входа в систему, а затем переключаться в главное окно (Shell ). Если пользователь выберет «Выйти из системы», событие должно снова всплыть в ApplicationViewModel/Controller, что приведет к деактивации/закрытию MainWindow,выполните выход из системы, а затем снова отобразите диалоговое окно входа в систему. Аналогично событию Close будет выполнен выход из системы, но затем завершение работы всего приложения.

Итак, мои вопросы:

  1. Что вы думаете об этом решении и есть ли у вас другое/лучшее?
  2. Как мне это реализовать? ;-)

Большое спасибо!

6
задан aKzenT 15 August 2012 в 09:10
поделиться