C# Caliburn.Micro HelloWindowManager示例-视图位置不工作

C# Caliburn.Micro HelloWindowManager示例-视图位置不工作,c#,wpf,mvvm,mef,caliburn.micro,C#,Wpf,Mvvm,Mef,Caliburn.micro,HelloWindowManager Caliburn.Micro示例演示了如何将窗口(视图)显示为模态、非模态或弹出窗口,效果很好。但是,它在项目根目录中具有视图和视图模型,因此我希望对其进行整理,并使其使用默认的视图和视图模型位置约定,因此我进行了以下更改: 创建了一个视图文件夹,并在其中移动了ShellView.xaml和DialogView.xaml 创建了ViewModels文件夹并移动了匹配的视图模型 调整了4个文件中的名称空间以反映移动 在运行修订后的示例时,我有一个奇怪的行为,即

HelloWindowManager Caliburn.Micro示例演示了如何将窗口(视图)显示为模态、非模态或弹出窗口,效果很好。但是,它在项目根目录中具有视图和视图模型,因此我希望对其进行整理,并使其使用默认的视图和视图模型位置约定,因此我进行了以下更改:

  • 创建了一个视图文件夹,并在其中移动了ShellView.xaml和DialogView.xaml
  • 创建了ViewModels文件夹并移动了匹配的视图模型
  • 调整了4个文件中的名称空间以反映移动
  • 在运行修订后的示例时,我有一个奇怪的行为,即虽然“打开模式”按钮工作正常,从而表明可以找到VM的视图,但打开无模式和打开弹出按钮都会导致消息“找不到caliburn.Micro.HelloWindowmanager.ViewModels.DialogViewModel的视图”

    有什么想法吗

    编辑以添加:

    由于没有任何人给出任何答案,我修改了示例以使用SimpleContainer而不是MEF,并且它显示了与上面完全相同的行为

    e、 g.此呼叫有效:
    var result=windowManager.ShowDialog(新的DialogViewModel())

    但这两个调用会导致“找不到视图…”错误消息

    windowManager.ShowWindow(new DialogViewModel(), "Modeless");
    
    windowManager.ShowPopup(新对话框ViewModel(),“Popup”,设置);
    


    我是否应该以某种方式将DialogViewModel添加到SimpleContainer中?

    很肯定我的评论就是答案

    在views文件夹中,您将需要一个名为Dialog的文件夹,在该文件夹中,您将放置Modeless.xaml和Popup.xaml,这两个文件夹都需要分别使用“.views.Dialog.Modeless”作为名称空间。这是一个视图定位器训练,就连我也曾多次尝试过/


    注意:这只是一种语义,您可以直接将其放入名称空间,而不必使用文件夹,但从项目的组织结构来看,这有助于更好地理解它。

    因此,请确保我拥有所有内容。您在w Views文件夹DialogView.xaml中有另一个名为Dialog的文件夹吗?没有。代码直接取自从CodePlex下载的working window manager示例。我所做的只是将视图和viewmodels分别从根名称空间移动到视图和viewmodels名称空间内。好的,我会尝试一下,但原始示例代码的要点是演示窗口管理器将视图显示为模态或非模态对话框,或弹出窗口,只需对同一视图以不同方式调用WindowManager即可。如果解决方案需要三个独立的视图来实现这一点,那么整个框架就没有我所希望的那么有用了。我可以通过将所有内容移回根名称空间来实现这一点,但我不希望我的项目像这样组织起来。看看有问题的项目源代码示例,它在项目的根文件夹中确实有“主”视图。然后是一个对话框文件夹,用于保存用户控件无模式和弹出窗口。这就是在窗口管理器调用中通过对话框ViewModel实例化向用户显示的内容。在本例中,只使用视图上下文说明符,而不是根目录中的DialogView。在这种情况下,只是重新调整viewmodal调用的用途。逻辑不在viewmodel中,而是在窗口管理器中。你可以很容易地使用框架在单个viewmodel上进行多视图,窗口管理器不是我第一次使用它。如果你这么做的话,想想这个例子,单视图模型,多视图…我看到你在考虑视图优先开发,这些例子大部分是视图优先开发。不,我一直在考虑VM优先开发,所以如果我给人的印象是我想要视图优先,那就错了。