【发布时间】:2016-05-19 13:24:49
【问题描述】:
所以,我在这里有点茫然。我正在 Visual Studio 2012 中创建 WCF 工作流服务。如果我有一个带有暴露子活动的 NativeActivity,我使用设计器填写了这些活动。下次我应该如何记住这些孩子是什么打开服务的 XAML 文件?
我创建了一个 NativeActivity,其中有一个 InvokeAction<String> 类型的孩子(见下文)。我在初始化对象时初始化孩子,这似乎很好。
我为此活动创建了一个自定义设计器,它仅使用WorkflowItemPresenter 来显示子活动(见下文)。
当我在我的 WF 服务中添加一个 NativeActivity1 的实例时,我看到我的自定义设计器预填充了我初始化它的 InvokeAction 的实例。我在InvokeAction 活动中添加了一些孩子(比如WriteLine),它出现了,一切看起来都很好。
我保存并构建,它成功了。我关闭并重新打开 WF 服务设计器,然后...WriteLine 消失了。我检查了为 WF 服务保存的 XAML,WriteLine 活动从未进入 XAML。
我的第一个想法是这总是会发生,因为设计者调用了 NativeActivity 的构造函数,它将它的子元素初始化为无子元素 InvokeAction<String>。
我不明白我应该如何设置它,所以在重新打开设计器时应该保留这种信息。
我在这里做错了什么?
NativeActivity1:
public sealed class NativeActivity1 : NativeActivity
{
public InvokeAction<String> child = new InvokeAction<string>()
{
Argument = new InArgument<string>(CSharpValue<String>.FromValue("string literal")),
};
public InvokeAction<String> Child { get { return child; } }
protected override void Execute(NativeActivityContext context)
{
context.ScheduleActivity(Child);
}
protected override void CacheMetadata(NativeActivityMetadata metadata)
{
metadata.AddChild(Child);
}
}
NativeActivity1Designer
<sap:ActivityDesigner x:Class="ActivityLibrary.VisualStudio.Design.NativeActivity1Designer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sap="clr-namespace:System.Activities.Presentation;assembly=System.Activities.Presentation"
xmlns:sapv="clr-namespace:System.Activities.Presentation.View;assembly=System.Activities.Presentation">
<Grid>
<sap:WorkflowItemPresenter Item="{Binding Path=ModelItem.Child, Mode=OneWay}"
Margin="5"
HintText="Drop Activity Here"/>
</Grid>
【问题讨论】:
标签: c# .net workflow-foundation-4