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

时间:2013-08-14 12:51:44

标签: c# wpf dialog caliburn.micro

修改

新信息,只是设法让记录器工作(老实说我不知道​​cm有一个!)并且在尝试使用TryClose()时我收到了此消息。

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

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

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

内容查看

<MenuItem Header="New Project" x:Name="OpenProject" cal:Message.Attach="[Event Click] = [Action NewProject()]"/>

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);
        }
    }

并且viewmodel NewProjectViewModel 具有以下内容:

 public void Create()
    {
        this.Result = true;
        TryClose(true);
    }
与之前一样调用的

与之前在对话框的确定按钮上使用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的原因?

1 个答案:

答案 0 :(得分:4)

你绝对会踢自己:

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

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

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

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