Exemple #1
0
        public object this[string key]
        {
            get
            {
                lock (lockProps)
                {
                    PopulateProperties();
                    if (!knownProps.ContainsKey(key.ToUpper()))
                    {
                        return(null);
                    }
                    return(knownProps[key.ToUpper()].Info.GetValue(this, null));
                }
            }
            set
            {
                lock (lockProps)
                {
                    PopulateProperties();
                    if (!knownProps.ContainsKey(key.ToUpper()))
                    {
                        return;
                    }

                    if (PropertySet != null)
                    {
                        PropertyDelegateEventArgs arg = new PropertyDelegateEventArgs {
                            Property = key.ToUpper(), OldValue = this[key.ToUpper()], NewValue = value, CancelEvent = false
                        };
                        PropertySet(this, arg);
                        if (arg.CancelEvent == true)
                        {
                            IsDirty = true;
                            return;
                        }
                    }

                    if (knownProps[key.ToUpper()].Info.PropertyType.IsArray || knownProps[key.ToUpper()].Info.PropertyType.IsGenericType)
                    {
                        int nb = Math.Min(((dynamic)(knownProps[key.ToUpper()].Info.GetValue(this, null))).Length, ((Array)value).Length);
                        for (int i = 0; i < nb; i++)
                        {
                            SetArrayValue(key, i, ((dynamic)value)[i]);
                        }

                        /*for (int i = 0; i < nb; i++)
                         *  knownProps[key.ToUpper()].SetValue(this, value, new object[] { i });*/
                    }
                    else
                    {
                        knownProps[key.ToUpper()].Info.SetValue(this, value, null);
                    }
                }
            }
        }
Exemple #2
0
 /// <summary>
 /// Calls the PropertySet call back.
 /// If cancelled then return false, otherwise return true.
 /// </summary>
 /// <param name="evt"></param>
 /// <returns></returns>
 internal bool CallPropertySet(PropertyDelegateEventArgs evt)
 {
     if (PropertySet != null)
     {
         PropertySet(this, evt);
         if (evt.CancelEvent == true)
         {
             IsDirty = true;
             return(false);
         }
     }
     return(true);
 }