Вызов метода Presenter при активации

Я использую Smart Client Software Factory 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

Несколько элементов повторно используют один и тот же ключ, поэтому при запуске этого действия отображается вкладка, а не создается ее новый экземпляр. Это прекрасно работает.

Однако есть один недостаток. После активации мне нужно запустить проверку в презентаторе этого элемента. Поэтому мне нужно вызвать метод ведущего. Есть ли способ вызвать метод на презентаторе или есть ли событие, которое запускается в представлении при активации рабочего элемента? Я не знаю, как это сделать?

Спасибо.


person Brian Mains    schedule 03.09.2013    source источник


Ответы (1)


Если вы используете 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, вы можете запустить желаемый код.

person neverseenjack    schedule 15.09.2013