我对MVVM概念和Caliburn相对较新,我遇到了一个问题。 我正在使用的应用程序使用Mahapps.Metro在WPF上进行“类似城域”的设计,而我正在使用Caliburn Micro来实现MVVM的优点。
我已按以下方式创建了我的应用程序:
ShellView
是mahapps metro的MetroWindow
,它包含一些我想要的所有视图设计内容(主要是徽标)和ContentControl
绑定到ActiveItem
ShellViewModel
派生自Conductor<Screen>
并实施IShell
ContentView
标准为UserControl
,ContentViewModel
继承自Screen
现在,在ContentView
中,我需要在用户点击时显示Flyout
。 Flyout
设置在MetroWindow
的弹出属性上。所以我对ContentViewModel
我应该如何在ShellView
上显示此弹出按钮感到有些迷失。
我应该使用事件聚合器并发送事件吗?我应该在ContentControl
上将弹出窗口定义为ShellView
并根据我应该显示的弹出窗口类型进行更改吗?
此外,我希望弹出按钮显示有点像ShowDialog
。弹出窗口显示相对复杂的“加载文件”屏幕。所以我要求显示它的代码应该知道用户何时验证或取消了屏幕并处理了加载文件的结果。
我将有其他“内容”视图,也会显示自己的弹出窗口。
感谢您的帮助。
答案 0 :(得分:1)
MVVM鼓励将逻辑与表示分离,因此我建议使用类似于MVVMLight中的Messenger子系统的事件聚合系统。您将构建一个可以在整个应用程序中重用的系统,而不是将模式对话框绑定到特定的源。
您的视图绑定到ViewModel命令,触发事件,订阅者ViewModel侦听和捕获,将Flyout显示为视图。