我打赌你不要从ModelItem中移除子类,而是从ModelItem中取出活动树。也就是说,你做了一个“GetCurrentValue”,将返回值转换为你的Activity类型,然后以这种方式去除这些孩子。这将不起作用,as the ModelItem representation of the Activity tree will get out of sync.您必须通过获取包含孩子的财产的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);
}
}
我敢打赌,您不要从ModelItem中移除子项,而是将ModelItem包装的Activity树移除。也就是说,你做了一个“GetCurrentValue”,将返回值转换为你的Activity类型,然后以这种方式去除这些孩子。这是行不通的,因为活动树的ModelItem表示将不同步。您必须通过获取包含子项的属性的ModelItem来移除子项,然后将其清除。 – Will 2012-04-17 13:12:08
你好。感谢那。你是对的,那正是我正在做的。我确切知道你来自哪里,但只是不知道该怎么做。这是否意味着我可以从我需要清除的父活动(序列?)中获取ModelItem?对不起,这是所有这些新东西... – 2012-04-17 15:36:55
让我看看我是否可以处理一段代码,然后我会回答。 – Will 2012-04-17 15:38:20