编程语言
首页 > 编程语言> > 首页> C#> Caliburn.Micro-ShowDialog()如何关闭对话框?

首页> C#> Caliburn.Micro-ShowDialog()如何关闭对话框?

作者:互联网

编辑:

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

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

我已经在此问题上停留了好几天,研究已经变成零,我以前尝试过发布有关此问题的问题,但是没有收到任何答案,所以我认为我的措词不正确.

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

ContentView:

<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"

这用于绑定视图模型,而不是通常使用的自动方式,这也许就是为什么GetView()返回null的原因?

解决方法:

您将完全踢自己:

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

如果您正在使用ViewModel-First(即您正在创建一个ViewModel,并使用WindowManager或在导体中显示它),则将CM绑定到视图的所有绑定工作都由CM完成.

在这种情况下,您不应使用任何View-First绑定.实际上,您要做的是更新VM的另一个实例并将其绑定到视图…因此,您在后台有两个ViewModel,一个很好地连接,但不再绑定,另一个非连接实例是绑定到您的视图,但不了解指挥.

只需删除视图中与视图模型的所有绑定即可,所有这些都将起作用!

标签:dialog,wpf,c,caliburn-micro
来源: https://codeday.me/bug/20191030/1968662.html