ModelItem から子を削除するのではなく、ModelItem がラップするアクティビティ ツリーから削除することは間違いありません。つまり、「GetCurrentValue」を実行し、戻り値を 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);
}
}