我刚开始学习Caliburn.Micro,想知道在我的应用程序中处理用户登录/注销周期的最佳方法是什么。我在网上看到一些建议,使用一个空的Shell-View来实现这个功能,该View可在登录视图和主应用程序视图之间切换,并分别使用自定义ViewModel。
我不太喜欢这个解决方案,因为对于我来说,这是两个具有非常不同属性(标题、图标、大小)的独立窗口,将一个窗口更改为另一个窗口的形式似乎不太合适。另一个问题是,登录窗口来自我无法控制的实用库,该库不使用Caliburn.Micro,而是普通的窗口,当用户点击“登录”时,该窗口会给我一个事件。
我还看到了一些建议,在Bootstrapper启动方法中显示此对话框,但我的问题是,用户可以选择“注销”应用程序,这应该再次显示登录对话框。在Bootstrapper中处理View之间的切换似乎是不合适的。
我希望有一种类似于Caliburn Conductor的ApplicationViewModel或ApplicationController,它可以在窗口之间进行切换,但不是在窗口内部切换Views,而是在LoginWindow和MainWindow之间进行切换,并且还应该处理整个应用程序的关闭(这也需要注销)。激活时,它将显示LoginWindow,处理登录事件,然后切换到主窗口(Shell)。如果用户选择“LogOut”,事件应再次冒泡到ApplicationViewModel/Controller,该ViewModel/Controller会停用/关闭MainWindow,执行注销操作,然后再次显示LoginDialog。类似地,Close事件将执行注销操作,但是然后关闭整个应用程序。
所以我的问题是:
1. 你对这个解决方案有什么看法?你有另一个/更好的解决方案吗?
2. 如何实现这个解决方案? ;-)
非常感谢!
我不太喜欢这个解决方案,因为对于我来说,这是两个具有非常不同属性(标题、图标、大小)的独立窗口,将一个窗口更改为另一个窗口的形式似乎不太合适。另一个问题是,登录窗口来自我无法控制的实用库,该库不使用Caliburn.Micro,而是普通的窗口,当用户点击“登录”时,该窗口会给我一个事件。
我还看到了一些建议,在Bootstrapper启动方法中显示此对话框,但我的问题是,用户可以选择“注销”应用程序,这应该再次显示登录对话框。在Bootstrapper中处理View之间的切换似乎是不合适的。
我希望有一种类似于Caliburn Conductor的ApplicationViewModel或ApplicationController,它可以在窗口之间进行切换,但不是在窗口内部切换Views,而是在LoginWindow和MainWindow之间进行切换,并且还应该处理整个应用程序的关闭(这也需要注销)。激活时,它将显示LoginWindow,处理登录事件,然后切换到主窗口(Shell)。如果用户选择“LogOut”,事件应再次冒泡到ApplicationViewModel/Controller,该ViewModel/Controller会停用/关闭MainWindow,执行注销操作,然后再次显示LoginDialog。类似地,Close事件将执行注销操作,但是然后关闭整个应用程序。
所以我的问题是:
1. 你对这个解决方案有什么看法?你有另一个/更好的解决方案吗?
2. 如何实现这个解决方案? ;-)
非常感谢!