Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 从ViewModel显示带有Caliburn Micro的MetroWindow弹出按钮_Wpf_Mvvm_Caliburn.micro_Mahapps.metro - Fatal编程技术网

Wpf 从ViewModel显示带有Caliburn Micro的MetroWindow弹出按钮

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

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

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

  • ShellView
    这是mahapps metro的
    MetroWindow
    ,它包含一些我希望在所有视图上使用的设计内容(主要是一个徽标)和绑定到
    ActiveItem的
    ContentControl
  • ShellViewModel
    源于
    Conductor
    并实现了
    IShell
  • 我有一个
    ContentView
    ,它是一个标准的
    UserControl
    ,其
    ContentView模型
    继承自
    屏幕
现在,在
ContentView
中,我需要在用户单击时显示一个
弹出按钮<代码>弹出按钮
设置在
MetroWindow
的弹出按钮属性上。因此,我对如何从我的
ContentViewModel
ShellView
上显示此弹出按钮有点迷茫

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

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

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


感谢您的帮助。

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


您的视图绑定到ViewModel命令,触发事件,订阅者ViewModel侦听并捕获,将弹出按钮显示为视图。

OK,有意义,但如何获取弹出按钮中编辑的信息?您有多种选择,可以将原始VM作为参数传递,根据您的特定使用场景,通过定位器引用静态VM或使用事件聚合器传回消息。