我有两个 VM - View(从 Screen 继承)和 Edit(从 Screen 继承)。视图用于显示带有数据的网格和编辑 - 将新项目添加/编辑到网格中。
在我的 ShellViewModel 中,我有以下代码来激活 View。
public void WorkstationView()
{
this.ActivateItem(ServiceLocator.Current.GetInstance<WorkstationViewModel>());
}
在 WorkstationViewModel 中,当用户单击 Create 按钮时,将调用以下代码
public void CreateAction()
{
EditableObject = new WorkstationDto();
TryClose(true);
}
并且有一个 Deactivated 事件属性的侦听器,请参见下面的代码(在 ShellViewModel 构造函数中调用 InitViewModels)。
private void InitViewModels()
{
#region Init
WorkstationViewModel = ServiceLocator.Current.GetInstance<WorkstationViewModel>();
WorkstationEditViewModel = ServiceLocator.Current.GetInstance<WorkstationEditViewModel>();
#endregion
#region Logic
WorkstationViewModel.Deactivated += (o, args) =>
{
if (WorkstationViewModel.EditableObject == null)
{
return;
}
WorkstationEditViewModel.EditableObject = WorkstationViewModel.EditableObject;
ActivateItem(WorkstationEditViewModel);
};
#endregion
}
这里的问题是当我关闭编辑视图时出现 StackOverflow 异常(请参阅创建操作)。