//----------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------------------------- namespace System.Activities.Statements { using System.Activities; using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics.CodeAnalysis; using System.Linq.Expressions; using System.Runtime; using System.Windows.Markup; [SuppressMessage(FxCop.Category.Naming, FxCop.Rule.IdentifiersShouldNotMatchKeywords, Justification = "Optimizing for XAML naming. VB imperative users will [] qualify (e.g. New [If])")] public sealed class If : NativeActivity { public If() : base() { } public If(Expression> condition) : this() { if (condition == null) { throw FxTrace.Exception.ArgumentNull("condition"); } this.Condition = new InArgument(condition); } public If(Activity condition) : this() { if (condition == null) { throw FxTrace.Exception.ArgumentNull("condition"); } this.Condition = new InArgument(condition); } public If(InArgument condition) : this() { if (condition == null) { throw FxTrace.Exception.ArgumentNull("condition"); } this.Condition = condition; } [RequiredArgument] [DefaultValue(null)] public InArgument Condition { get; set; } [DefaultValue(null)] [DependsOn("Condition")] public Activity Then { get; set; } [DefaultValue(null)] [DependsOn("Then")] public Activity Else { get; set; } protected override void OnCreateDynamicUpdateMap(DynamicUpdate.NativeActivityUpdateMapMetadata metadata, Activity originalActivity) { metadata.AllowUpdateInsideThisActivity(); } protected override void Execute(NativeActivityContext context) { if (Condition.Get(context)) { if (Then != null) { context.ScheduleActivity(Then); } } else if (Else != null) { context.ScheduleActivity(Else); } } protected override void CacheMetadata(NativeActivityMetadata metadata) { RuntimeArgument conditionArgument = new RuntimeArgument("Condition", typeof(bool), ArgumentDirection.In, true); metadata.Bind(this.Condition, conditionArgument); metadata.SetArgumentsCollection(new Collection { conditionArgument }); Collection children = null; if (this.Then != null) { ActivityUtilities.Add(ref children, this.Then); } if (this.Else != null) { ActivityUtilities.Add(ref children, this.Else); } metadata.SetChildrenCollection(children); } } }