public ActivityDelegateItem(ModelItem modelItem, ActivityDelegateMetadataAttribute metadata = null)
        {
            Contract.Requires(modelItem != null);
            ModelItem = modelItem;

            if (metadata == null)
            {
                var pmi = modelItem.Parent.Properties.Where(p => p.Value == modelItem).First();
                metadata = pmi.Attributes[typeof(ActivityDelegateMetadataAttribute)] as ActivityDelegateMetadataAttribute;
            }

            if (metadata != null)
            {
                ObjectName = metadata.ObjectName;
                ResultName = metadata.ResultName;
                Argument1Name = metadata.Argument1Name;
                Argument2Name = metadata.Argument2Name;
                Argument3Name = metadata.Argument3Name;
                Argument4Name = metadata.Argument4Name;
                Argument5Name = metadata.Argument5Name;
                Argument6Name = metadata.Argument6Name;
                Argument7Name = metadata.Argument7Name;
                Argument8Name = metadata.Argument8Name;
            }
            if (string.IsNullOrWhiteSpace(ObjectName)) ObjectName = ModelItem.ItemType.GetGenericArguments()[0].Name;
        }
 private void Init(ModelItem delegateModelItem, ActivityDelegateMetadataAttribute metadata, bool bindResult)
 {
     if (bindResult) InitArg(delegateModelItem, "Result", metadata.ResultName);
     if (InitArg(delegateModelItem, "Argument", metadata.Argument1Name)) return;
     if (!InitArg(delegateModelItem, "Argument1", metadata.Argument1Name)) return;
     if (!InitArg(delegateModelItem, "Argument2", metadata.Argument2Name)) return;
     if (!InitArg(delegateModelItem, "Argument3", metadata.Argument3Name)) return;
     if (!InitArg(delegateModelItem, "Argument4", metadata.Argument4Name)) return;
     if (!InitArg(delegateModelItem, "Argument5", metadata.Argument5Name)) return;
     if (!InitArg(delegateModelItem, "Argument6", metadata.Argument6Name)) return;
     if (!InitArg(delegateModelItem, "Argument7", metadata.Argument7Name)) return;
     if (!InitArg(delegateModelItem, "Argument8", metadata.Argument8Name)) return;
 }
 private void Init()
 {
     bool bindResult = true;
     foreach (var parentModelItem in activityModelItem.GetParents())
     {
         if (parentModelItem.Attributes.OfType<CollectionBlueprintActivityMarkAttribute>().Any())
         {
             var itemResultNameProp = parentModelItem.Properties["ItemResultName"];
             if (itemResultNameProp != null)
             {
                 ModelProperty activityArgProp;
                 if (ActivityArgPropDict.TryGetValue("Result", out activityArgProp))
                 {
                     var helper = ArgHelper.Create(activityArgProp);
                     helper.Set(activityArgProp, itemResultNameProp.Value.GetCurrentValue() as string);
                     AddBind(itemResultNameProp, activityArgProp, helper, false);
                 }
             }
             bindResult = false;
         }
         else
         {
             var parentObj = parentModelItem.GetCurrentValue();
             if (parentObj != null)
             {
                 if (parentObj is ActivityDelegate)
                 {
                     var metadata = (from pp in parentModelItem.Parent.Properties
                                     where pp.Value == parentModelItem
                                     from a in pp.Attributes.OfType<ActivityDelegateMetadataAttribute>()
                                     select a).FirstOrDefault();
                     if (metadata == null) metadata = new ActivityDelegateMetadataAttribute();
                     Init(parentModelItem, metadata, bindResult);
                     return;
                 }
             }
         }
     }
 }