ModelItem編集コンテキストは、ホスト アプリケーションがデザイナーとの通信に使用するオブジェクトです。 EditingContext は、 Items と Servicesの 2 つのメソッドを公開します。これは使用できます。
Items コレクション
Items コレクションは、ホストとデザイナーの間で共有されるデータ、またはすべてのデザイナーが使用できるデータにアクセスするために使用されます。 このコレクションには、 ContextItemManager クラスを介してアクセスする次の機能があります。
Services コレクション
Services コレクションは、デザイナーがホストとの対話に使用するサービス、またはすべてのデザイナーが使用するサービスにアクセスするために使用されます。 このコレクションには、次に示す特筆すべきメソッドがあります。
デザイナーにアクティビティを割り当てる
アクティビティで使用するデザイナーを指定するには、Designer 属性を使用します。
[Designer(typeof(MyClassDesigner))]
public sealed class MyClass : CodeActivity
{
}
サービスの作成
デザイナーとホストの間の情報の導管として機能するサービスを作成するには、インターフェイスと実装を作成する必要があります。 インターフェイスは、 Publish メソッドによってサービスのメンバーを定義するために使用され、実装にはサービスのロジックが含まれています。 次のコード例では、サービス インターフェイスと実装が作成されます。
public interface IMyService
{
IEnumerable<string> GetValues(string DisplayName);
}
public class MyServiceImpl : IMyService
{
public IEnumerable<string> GetValues(string DisplayName)
{
return new string[] {
DisplayName + " One",
DisplayName + " Two",
"Three " + DisplayName
} ;
}
}
サービスの公開
デザイナーがサービスを使用するには、まず、 Publish メソッドを使用してホストによって発行される必要があります。
this.Context.Services.Publish<IMyService>(new MyServiceImpl);
サービスへの加入
デザイナーは、Subscribe メソッドの OnModelItemChanged メソッドを使用してサービスへのアクセスを取得します。 次のコード スニペットは、サービスをサブスクライブする方法を示しています。
protected override void OnModelItemChanged(object newItem)
{
if (!subscribed)
{
this.Context.Services.Subscribe<IMyService>(
servInstance =>
{
listBox1.ItemsSource = servInstance.GetValues(this.ModelItem.Properties["DisplayName"].ComputedValue.ToString());
}
);
subscribed = true;
}
}
Items コレクションを使用したデータの共有
Items コレクションの使用は、Services コレクションの使用と似ていますが、発行の代わりに SetValue が使用される点が異なります。 このコレクションは、複雑な機能ではなく、デザイナーとホストの間で単純なデータを共有する場合に適しています。
EditingContext ホスト項目とサービス
.NET Framework には、編集コンテキストを介してアクセスされる組み込みの項目とサービスが多数用意されています。
項目:
AssemblyContextControlItem: コントロール (式エディターなど) のワークフロー内で使用される参照先のローカル アセンブリの一覧を管理します。
ReadOnlyState: デザイナーが読み取り専用状態かどうかを示します。
Selection: 現在選択されているオブジェクトのコレクションを定義します。
WorkflowFileItem: 現在の編集セッションの基になっているファイルに関する情報を提供します。
サービス:
AttachedPropertiesService: AddPropertyを使用して、現在のインスタンスにプロパティを追加できるようにします。
DesignerView: デザイナー キャンバスのプロパティへのアクセスを許可します。
IActivityToolboxService: ツールボックスの内容を更新できるようにします。
ICommandService: デザイナー コマンド (コンテキスト メニューなど) をカスタム提供のサービス実装と統合するために使用されます。
IDesignerDebugView: デザイナー デバッガーの機能を提供します。
IExpressionEditorService: [式エディター] ダイアログへのアクセスを可能にします。
IIntegratedHelpService: デザイナーに統合されたヘルプ機能を提供します。
IValidationErrorService: ShowValidationErrorsを使用して検証エラーにアクセスできます。
IWorkflowDesignerStorageService: データを格納および取得するための内部サービスを提供します。 このサービスは.NET Framework によって内部的に使用され、外部での使用を目的としたものではありません。
IXamlLoadErrorService: ShowXamlLoadErrorsを使用して XAML 読み込みエラー コレクションにアクセスできます。
ModelService: 編集中のワークフローのモデルを操作するためにデザイナーによって使用されます。
ModelTreeManager: Rootを使用して、モデル項目ツリーのルートへのアクセスを提供します。
UndoEngine: 元に戻す機能とやり直し機能を提供します。
ViewService: ビジュアル要素を基になるモデル 項目にマップします。
ViewStateService: モデル アイテムのビューステートを格納します。
VirtualizedContainerService: 仮想コンテナーの UI 動作をカスタマイズするために使用します。
WindowHelperService: イベント通知のデリゲートを登録および登録解除するために使用されます。 また、ウィンドウ所有者を設定することもできます。
.NET