使用ViewModel中的Caliburn Micro显示MetroWindow弹出窗口

时间:2013-12-11 10:51:07

标签: wpf mvvm caliburn.micro mahapps.metro

我对MVVM概念和Caliburn相对较新,我遇到了一个问题。 我正在使用的应用程序使用Mahapps.Metro在WPF上进行“类似城域”的设计,而我正在使用Caliburn Micro来实现MVVM的优点。

我已按以下方式创建了我的应用程序:

  • ShellView是mahapps metro的MetroWindow,它包含一些我想要的所有视图设计内容(主要是徽标)和ContentControl绑定到ActiveItem
  • ShellViewModel派生自Conductor<Screen>并实施IShell
  • 我的ContentView标准为UserControlContentViewModel继承自Screen

现在,在ContentView中,我需要在用户点击时显示FlyoutFlyout设置在MetroWindow的弹出属性上。所以我对ContentViewModel我应该如何在ShellView上显示此弹出按钮感到有些迷失。

我应该使用事件聚合器并发送事件吗?我应该在ContentControl上将弹出窗口定义为ShellView并根据我应该显示的弹出窗口类型进行更改吗?

此外,我希望弹出按钮显示有点像ShowDialog。弹出窗口显示相对复杂的“加载文件”屏幕。所以我要求显示它的代码应该知道用户何时验证或取消了屏幕并处理了加载文件的结果。

我将有其他“内容”视图,也会显示自己的弹出窗口。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

MVVM鼓励将逻辑与表示分离,因此我建议使用类似于MVVMLight中的Messenger子系统的事件聚合系统。您将构建一个可以在整个应用程序中重用的系统,而不是将模式对话框绑定到特定的源。

您的视图绑定到ViewModel命令,触发事件,订阅者ViewModel侦听和捕获,将Flyout显示为视图。