在激活时调用Presenter的方法

时间:2013-09-03 14:15:07

标签: vb.net visual-studio-2008 smartclient scsf

我正在使用智能客户端软件工厂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

多个项重复使用相同的键,因此当触发该操作时,它会显示选项卡,而不是创建新的实例。这很有效。

然而,有一个缺点。一旦激活,我需要在该项目的演示者中进行检查。所以我需要在演示者上调用一个方法。有没有办法在演示者上调用方法,或者在激活工作项时是否有在视图上运行的事件?我不确定如何实现这一目标?

感谢。

1 个答案:

答案 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类,则可以运行所需的代码。