2

我对 MVVM 概念和 Caliburn 比较陌生,但我遇到了一个问题。我正在开发的应用程序使用 Mahapps.Metro 在 WPF 上进行“类似地铁”的设计,而我正在使用 Caliburn Micro 来实现 MVVM 的优点。

我通过以下方式创建了我的应用程序:

  • ShellView那是 mahapps metro 的MetroWindow,它包含一些我想要在所有视图(主要是徽标)和ContentControl绑定到ActiveItem
  • ShellViewModel派生自和Conductor<Screen>实现IShell
  • 我有ContentView一个标准UserControl,他ContentViewModel继承自Screen

现在,在 中ContentView,我需要Flyout在用户点击时显示一个。FlyoutMetroWindow的 Flyouts 属性上设置。所以我有点迷失ContentViewModel我应该如何在ShellView.

我应该使用事件聚合器并发送事件吗?我是否应该将浮出控件定义为 aContentControlShellView根据我应该显示的浮出控件类型进行更改?

我也希望弹出显示有点像ShowDialog. 弹出是显示一个相对复杂的“加载文件”屏幕。所以我的代码要求显示它应该知道用户何时验证或取消屏幕并处理加载文件的结果。

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

谢谢你的帮助。

4

1 回答 1

1

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

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

于 2013-12-11T11:01:24.473 回答