ModelItem 編集コンテキストの使用
ModelItem 編集コンテキストは、ホスト アプリケーションがデザイナーとの通信に使用するオブジェクトです。 EditingContext は使用できる 2 つのメソッド Items と Services を公開します。
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 コレクションの使用と似ていますが、Publish の代わりに 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