我敢打赌,您不会从 ModelItem 中删除子项,而是从 ModelItem 包装的 Activity 树中删除。即,您执行“GetCurrentValue”,将返回值转换为您的 Activity 类型,然后以这种方式删除子项。那是行不通的,因为 Activity 树的 ModelItem 表示将不同步。您必须通过获取包含子项的属性的 ModelItem 来删除子项,然后将其清除。
例如,给定以下活动
[Designer(typeof(NativeActivity1Designer))]
public sealed class NativeActivity1 : NativeActivity, IActivityTemplateFactory
{
public Activity Child { get; set; }
protected override void Execute(NativeActivityContext context) { }
Activity IActivityTemplateFactory.Create(System.Windows.DependencyObject target)
{
return new NativeActivity1
{
Child = new Sequence()
};
}
}
和以下设计器(为简洁起见,删除了 ActivityDesigner 节点)
<StackPanel>
<sap:WorkflowItemPresenter
MinHeight="100"
HintText="Drop it here"
Item="{Binding ModelItem.Child}" />
<Button
Content="Remove"
Click="Button_Click" />
</StackPanel>
您可以使用中的代码Button_Click
从设计器的工作流中删除子项。
public partial class NativeActivity1Designer
{
public NativeActivity1Designer()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
ModelProperty child = ModelItem.Properties["Child"];
child.SetValue(null);
}
}