あなたは、設計時にすでに満たされたワークフローをしたい場合は、多分あなたはIActivityTemplateFactoryとワークアウトの何かをすることができます。要するに
public class TwoActivitiesBundle : IActivityTemplateFactory
{
public Activity Create(DependencyObject target)
{
return new Sequence
{
Variables =
{
new Variable<int>("addResult"),
},
Activities =
{
new Add<int, int, int>
{
Left = 10,
Right = 10,
Result = new VisualBasicReference<int>("addResult")
},
new WriteLine { Text = "Now I'll use 'addResult', as a value on the next activity" },
new Subtract<int, int, int>
{
Left = new VisualBasicValue<int>("addResult"),
Right = 10,
},
new WriteLine { Text = new VisualBasicValue<string>("\"Print addResultValue: \" & addResult")}
}
};
}
}
、IActivityTemplateFactoryはあなたがデザイナーに活動を構築し、満たされた、既にドロップすることができます。
new ToolboxItemWrapper(typeof(TwoActivitiesBundle), null, "My Bundle");
エクストラ:次に、あなたは他の活動として、設計者のツールボックスに、この場合には、TwoActivitiesBundleをあなたの工場を追加し、あなたが本当に親に変数を追加したい場合は
コンテナを使用して、Create()
メソッドで受け取ったtarget
パラメータを使用して、ワークフローをトラバースしてそのコンテナを見つけることができます。
これはあなたがシーケンスの内部TwoActivitiesBundle
をドロップすることを前提とし、後者に変数を追加する例である:あなたがhereを見ることができる同様
public class TwoActivitiesBundle : IActivityTemplateFactory
{
public Activity Create(DependencyObject target)
{
var sequenceModelItem = (target as WorkflowViewElement).ModelItem;
sequenceModelItem
.Properties["Variables"]
.Collection
.Add(new Variable<string>("myFirstDesignTimeVariable", "var text here"));
// This activity writes "I've just created a new variable: var text here" to the console
return new WriteLine
{
Text = new VisualBasicValue<string>("\"I've just created a new variable: \" & myFirstDesignTimeVariable");
}
}
}
、ModelItem は、編集モデルに単一の項目を表します。そのため、Root,Parent、Parentsのプロパティを使用して、すべてのワークフローをトラバースすることができます。上記の例のように、各ModelItemプロパティを編集することができます。これは非常に手間がかかり、途中でいくつかの前提を取る必要があるかもしれないことに注意してください。
あるアクティビティの変数を直後に渡す場合は、1つのアクティビティで両方のアクティビティを結合することを検討する必要があります。とにかく、私の答えをチェックしてください。 – Joao