wpf - 在 ViewModel 中使用 Caliburn Micro 显示 MetroWindow Flyout

标签 wpf mvvm caliburn.micro mahapps.metro

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

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

  • ShellView那是mahapps 地铁的MetroWindow ,它包含一些我想要在所有 View 中使用的设计内容(主要是 Logo )和 ContentControl绑定(bind)到 ActiveItem
  • ShellViewModel源自 Conductor<Screen>并实现 IShell
  • 我有一个 ContentView这是一个标准UserControl和他的ContentViewModel继承自 Screen

  • 现在,在 ContentView , 我需要显示一个 Flyout在用户点击时。 Flyout设置在 MetroWindow的 Flyouts 属性。所以我对我的 ContentViewModel 的方法有点迷茫我应该在 ShellView 上显示此弹出窗口.

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

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

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

    谢谢你的帮助。

    最佳答案

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

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

    关于wpf - 在 ViewModel 中使用 Caliburn Micro 显示 MetroWindow Flyout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20517143/

    相关文章:

    silverlight - Caliburn.Micro 中单个 View 中的两个动态分配的 ContentControl

    c# - WPF缩放 Canvas 在鼠标位置上居中

    c# - 为什么 TextBlock 不绑定(bind)?

    jquery - Kendo UI,使用 MVVM 时如何从 DOM 元素获取小部件对象?

    WPF:MVVM 对转换器说不,但我需要很好的枚举值

    android - 就单元测试而言,Android 的 MVP 或 MVVM?

    c# - Caliburn Micro 用户控制数据上下文

    c# - WPF MVVM ObservableCollection/DataGrid 多个 Sql 表

    c# - 从 ControlTemplate By Name 在代码中获取控制权

    c# - Caliburn Micro IsVisibleChanged 不触发