public object this[string key]
{
get
{
lock (lockProps)
{
PopulateProperties();
if (!knownProps.ContainsKey(key.ToUpper()))
return null;
return knownProps[key.ToUpper()].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()].PropertyType.IsArray)
{
int nb = Math.Min(((Array)knownProps[key.ToUpper()].GetValue(this, null)).Length, ((Array)value).Length);
for (int i = 0; i < nb; i++)
SetArrayValue(key, i, value);
/*for (int i = 0; i < nb; i++)
knownProps[key.ToUpper()].SetValue(this, value, new object[] { i });*/
}
else
knownProps[key.ToUpper()].SetValue(this, value, null);
}
}
}