【问题标题】:Display a MetroWindow Flyout with Caliburn Micro from a ViewModel在 ViewModel 中使用 Caliburn Micro 显示 MetroWindow Flyout
【发布时间】:2013-12-11 10:51:06
【问题描述】:

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

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

  • ShellView 是 mahapps Metro 的 MetroWindow,它包含一些我想要在所有视图(主要是徽标)上使用的设计内容和绑定到 ActiveItemContentControl
  • ShellViewModel 派生自 Conductor<Screen> 并实现 IShell
  • 我有一个ContentView,它是一个标准UserControl,他的ContentViewModel 继承自Screen

现在,在ContentView 中,我需要在用户点击时显示FlyoutFlyout 设置在 MetroWindow 的 Flyouts 属性上。所以我有点迷失在我的ContentViewModel 应该如何在ShellView 上显示这个弹出窗口。

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

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

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

感谢您的帮助。

【问题讨论】:

    标签: wpf mvvm caliburn.micro mahapps.metro


    【解决方案1】:

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

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

    【讨论】:

    • 好的,有道理,但是我如何取回已在弹出窗口中编辑的信息?
    • 您有多种选择,将原始 VM 作为参数传递、通过定位器引用静态 VM 或使用事件聚合器将消息传回,具体取决于您的特定使用场景。
    猜你喜欢
    • 1970-01-01
    • 2013-06-26
    • 2020-10-24
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 2019-12-11
    • 2012-03-23
    • 2015-12-06
    相关资源
    最近更新 更多