Wpf 从ViewModel显示带有Caliburn Micro的MetroWindow弹出按钮
我对MVVM概念和Caliburn还比较陌生,但我遇到了一个问题。 我正在开发的应用程序使用Mahapps.Metro在WPF上进行“类似Metro”的设计,我使用Caliburn Micro进行MVVM设计 我以以下方式创建了我的应用程序:Wpf 从ViewModel显示带有Caliburn Micro的MetroWindow弹出按钮,wpf,mvvm,caliburn.micro,mahapps.metro,Wpf,Mvvm,Caliburn.micro,Mahapps.metro,我对MVVM概念和Caliburn还比较陌生,但我遇到了一个问题。 我正在开发的应用程序使用Mahapps.Metro在WPF上进行“类似Metro”的设计,我使用Caliburn Micro进行MVVM设计 我以以下方式创建了我的应用程序: ShellView这是mahapps metro的MetroWindow,它包含一些我希望在所有视图上使用的设计内容(主要是一个徽标)和绑定到ActiveItem的ContentControl ShellViewModel源于Conductor并实现了I
这是mahapps metro的ShellView
,它包含一些我希望在所有视图上使用的设计内容(主要是一个徽标)和绑定到MetroWindow
ActiveItem的
ContentControl
源于ShellViewModel
并实现了Conductor
IShell
- 我有一个
,它是一个标准的ContentView
,其UserControl
继承自ContentView模型
屏幕
ContentView
中,我需要在用户单击时显示一个弹出按钮<代码>弹出按钮
设置在MetroWindow
的弹出按钮属性上。因此,我对如何从我的ContentViewModel
在ShellView
上显示此弹出按钮有点迷茫
我应该使用事件聚合器并发送事件吗?是否应将弹出按钮定义为ShellView
上的ContentControl
,并根据应显示的弹出按钮类型进行更改
另外,我希望弹出按钮的显示有点像ShowDialog
。弹出按钮用于显示相对复杂的“加载文件”屏幕。因此,我要求显示它的代码应该知道用户何时验证或取消了屏幕,并处理加载文件的结果
我将有其他“内容”视图,它们也将显示自己的弹出按钮
感谢您的帮助。MVVM鼓励将逻辑与表示分离,因此我建议使用类似于MVVMLight中Messenger子系统的事件聚合系统。您将构建一个可以在整个应用程序中重用的系统,而不是将模态对话框绑定到特定的源
您的视图绑定到ViewModel命令,触发事件,订阅者ViewModel侦听并捕获,将弹出按钮显示为视图。OK,有意义,但如何获取弹出按钮中编辑的信息?您有多种选择,可以将原始VM作为参数传递,根据您的特定使用场景,通过定位器引用静态VM或使用事件聚合器传回消息。