首页> 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