Caliburn.Micro – ShowDialog()如何关闭对话框?

编辑:

新信息,只是设法让记录器工作(我真的不知道cm有一个!)并且我在尝试使用TryClose()时给出了此消息。

 TryClose requires a parent IConductor or a view with a Close method or IsOpen property 

我已经被困在这几天了,研究已经变为零,我之前尝试过发布一个关于这个问题的问题,但是没有得到答案所以我认为我没有正确说出来。

我有一个视图和viewmodel ContentView / Model ,其中包含以下代码:

ContentView

  

ContentViewModel

 public void NewProject() { NewProjectViewModel viewModel = new NewProjectViewModel(_projectManager); _windowManager.ShowWindow(viewModel); //If the result is true, we have a new project, otherwise they cancelled the window. if (viewModel.Result) { Project newP = new Project(0, viewModel.ProjectNo, viewModel.ProjectName, 0, 0); _projectManager.Insert(newP); } } 

并且视图模型NewProjectViewModel具有以下内容:

  public void Create() { this.Result = true; TryClose(true); } 

与之前在对话框的OK按钮上使用message.attach一样调用。

然而问题是TryClose()总是无法关闭对话框,因为我没有caliburn.micro的源代码我无法在TryClose()调试但是做(GetView() As Window).Close()也失败,因为GetView()始终返回null。

我完全不知道如何关闭这个对话框,所以任何帮助或建议将不胜感激。

编辑:因为我似乎没有得到这方面的答案,就像以前的问题一样,我会假设我缺少信息。 为了理解这个问题,我认为它可能与使用视图第一种方法有关。

NewProjectView中,我有以下内容:

  xmlns:cal="http://www.caliburnproject.org" cal:Bind.Model="ShippingClient.ViewModels.NewProjectViewModel" 

这用于绑定viewmodel而不是通常使用的自动方式,也许这就是GetView()返回null的原因?

你绝对会踢自己:

删除cal:Bind.Modelcal:View.Model绑定…

如果您正在使用ViewModel-First(即您正在创建一个视图模型并使用WindowManager或在指挥中显示它),那么将视图模型粘合到视图的所有绑定内容都由CM完成。

在这种情况下,您不应使用任何View-First绑定。 你实际上正在做的是新建你的VM的另一个实例并将其绑定到你的视图…所以你在后台有两个视图模型,一个很好地连接但不再绑定,以及一个非有线的实例,它是绑定到您的视图,但不知道指挥。

只需删除视图中对viewmodel的任何绑定,它都可以正常工作!