Veg*_*sen 6 c# wpf caliburn.micro
我正在使用Caliburn.Micro开发应用程序.我需要同时在多个显示器上打开一组相同的窗口,我无法弄清楚如何干净利落地完成这项工作.
我的想法是这样的:
ChildViewModel/ ChildView包含我需要在多个屏幕上显示的内容.ParentViewModel继承自ConductorBase<ChildViewModel>.ParentViewModel被创建,它会创建所需数量的ChildViewModel和使用WindowManager.ShowWindow,以显示他们每个人.WindowManager实现负责将这些视图放在它们应该的位置.所有上述工作都有,但有一个例外:ParentView它显示在自己的窗口中.我怎样才能避免这种情况发生?做我想做的事情的规范方式是什么?
我想要做的是从单个导体进行多个窗口,而导体本身没有窗口.
这个架构怎么样?
SystemTrayVM
(VM for your notification area, its View is the sys tray icon)
|
|
MultipleDesktopManager
(not a VM, not a ConductorBase, no View, not visible)
|
.-------------------|------------------.
| | |
| | |
SingleDesktopVM SingleDesktopVM SingleDesktopVM
(its View holds child views. If necessary, it can be a ConductorBase)
|
.-------------|------------.------ - - - .
| | |
| | |
SideBarChildVM MainChildVM FooterChildVM
Run Code Online (Sandbox Code Playgroud)
SystemTrayVM负责通过通知区域提供的所有交互(右键单击菜单操作等).它实际上不会打开/关闭用户可见的窗口,而是将这些命令转发到MultipleDesktopManager.
MultipleDesktopManager不可见,不是VM.它的职责是在需要时打开/关闭所有单个桌面父窗口.作为完全独立的窗户,不需要完整的导体.根据我的经验,它足以为它提供一个IWindowManager,以便它可以实际显示/关闭单个桌面父窗口.也许它也可以激活/停用它们,但不需要跟踪当前活动的项目或类似的东西.
在最近的过去,我们遇到并解决了WPF应用程序开始不可见的问题,只能在系统托盘中找到,并且能够显示/隐藏实际的主应用程序窗口.
在那种情况下,我们将隐藏/显示主应用程序窗口的任务卸载到SystemTrayVM调用的辅助类(而不是VM).这将相当于此架构中的MultipleDesktopManager.
关于仅从系统托盘开始的WPF应用程序,我们在GitHub上放置了一个PoC,它显示了如何将此WPF NotifyIcon控件与Caliburn.Micro ViewModel优先方法和DI通过Autofac 完全集成.
编辑:理由是CM提供现成的导体实现似乎更适合窗口持有其他子窗口.如果支架本身不可见,那么这些导体实施可能不是最佳选择.正如你在评论中所说,这就像需要指挥不是一个屏幕.关于"准导体"的CM组合文档页面上有一点有趣.最后,MultipleDesktopManager的想法基本上是一个管理许多窗口的简单导体,没有实现IConductor接口但仍然使用WindowManager来处理SingleDesktopVMs 生命周期正确.
| 归档时间: |
|
| 查看次数: |
1521 次 |
| 最近记录: |