修改
新信息,只是设法让记录器工作(老实说我不知道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的原因?
答案 0 :(得分:4)
你绝对会踢自己:
删除cal:Bind.Model
和cal:View.Model
绑定...
如果您正在使用ViewModel-First(即您正在创建视图模型并使用WindowManager
或在指挥中显示它),那么将视图模型粘贴到视图的所有绑定内容都由CM完成。
在这种情况下,您不应使用任何View-First绑定。你实际上正在做的是新建你的VM的另一个实例并将其绑定到你的视图...所以你在后台有两个视图模型,一个很好地连接但不再绑定,一个非有线的实例是绑定到你的视线,但不知道指挥。
只需删除视图中对viewmodel的任何绑定,它都可以正常工作!