0

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

複数のアイテムが同じキーを再利用するため、そのアクションがトリガーされると、タブの新しいインスタンスを作成する代わりにタブが表示されます。これはうまくいきます。

ただし、1 つの欠点があります。アクティブ化したら、そのアイテムのプレゼンター内でチェックを実行する必要があります。そのため、プレゼンターでメソッドを呼び出す必要があります。プレゼンターでメソッドを呼び出す方法はありますか、またはワークアイテムがアクティブ化されたときにビューで実行されるイベントはありますか? それを実現する方法がわかりませんか?

ありがとう。

4

1 に答える 1

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();
}

SmartPartActivatedISmartPartView Presenter クラスでは、次のようなイベントのハンドラーを作成できるはずです。

IWorkspace contentWorkspace = this.WorkItem.Workspaces[WorkspaceNames.ShellContentWorkspace];
contentWorkspace.SmartPartActivated += workSpaceSmartPart_ActivatedHandler;

イベント ハンドラーで、workSpaceSmartPart_ActivatedHandlerアクティブ化されている SmartPart を確認できます。その ISmartPartView クラスの場合は、目的のコードを実行できます。

于 2013-09-15T18:05:58.107 に答える