我正在使用智能客户端软件工厂2008.在模块控制器中,我有代码,只有在尚未创建新子控制器的情况下才创建新的子控制器,执行以下操作:
Dim key = "Item-" + item.ID.ToString()
Dim childWorkItem = Me.WorkItem.WorkItems.Get(Of ControlledWorkItem(Of ItemWorkItemController))(key)
If childWorkItem Is Nothing Then
childWorkItem = Me.WorkItem.WorkItems.AddNew(Of ControlledWorkItem(Of ItemWorkItemController))(key)
Else
childWorkItem.Activate()
End If
多个项重复使用相同的键,因此当触发该操作时,它会显示选项卡,而不是创建新的实例。这很有效。
然而,有一个缺点。一旦激活,我需要在该项目的演示者中进行检查。所以我需要在演示者上调用一个方法。有没有办法在演示者上调用方法,或者在激活工作项时是否有在视图上运行的事件?我不确定如何实现这一目标?
感谢。
答案 0 :(得分:0)
如果您使用Smart Part
作为视图,则可以使用IWorkspace.SmartPartActivated
事件完成此操作。
这就是我在项目中设置它的方法。我很抱歉,我的代码全部都在C#中,但您应该可以相对容易地在VB中应用它。
WorkItemController
类的Activate
方法设置如此
ISmartPartView _smartPartView
public void Activate()
{
IWorkspace contentWorkspace = this.WorkItem.Workspaces[WorkspaceNames.ShellContentWorkspace];
contentWorkspace.Activate(_smartPartView);
WorkItem.Activate();
}
在ISmartPartView Presenter类中,您应该能够为SmartPartActivated
事件创建一个处理程序,如下所示:
IWorkspace contentWorkspace = this.WorkItem.Workspaces[WorkspaceNames.ShellContentWorkspace];
contentWorkspace.SmartPartActivated += workSpaceSmartPart_ActivatedHandler;
在workSpaceSmartPart_ActivatedHandler
事件处理程序中,您可以检查正在激活的SmartPart,如果是您的ISmartPartView类,则可以运行所需的代码。