public FFTypeDescriptor([NotNull] object targetObject) { _WrappedObject = targetObject; Type type = targetObject.GetType(); PropertyDescriptorCollection pdc; if (!__TypedDescriptorCollection.TryGetValue(type, out pdc)) { pdc = new PropertyDescriptorCollection(null); foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(type)) { var desc = new MyPropDesc(pd); desc.ValueChanging += Property_ValueChanging; pdc.Add(desc); } foreach (BindPropertyAttribute a in type.GetCustomAttributes <BindPropertyAttribute>()) { var childProp = a.GetSourcePropertyInfo(type); var v = childProp.GetValue(targetObject, null); var pdcs = TypeDescriptor.GetProperties(v, false); var bpd = new BindPropertyDescriptor(pdcs[a.Property], childProp, a.DisplayName, a.Description, a.Category); bpd.ValueChanging += Property_ValueChanging; pdc.Add(bpd); } __TypedDescriptorCollection.Add(type, pdc); } _DescriptorCollection = pdc; }
public FFTypeDescriptor([NotNull]object targetObject) { _WrappedObject = targetObject; Type type = targetObject.GetType(); PropertyDescriptorCollection pdc; if (!__TypedDescriptorCollection.TryGetValue(type, out pdc)) { pdc = new PropertyDescriptorCollection(null); foreach (PropertyDescriptor pd in TypeDescriptor.GetProperties(type)) { var desc = new MyPropDesc(pd); desc.ValueChanging += Property_ValueChanging; pdc.Add(desc); } foreach (BindPropertyAttribute a in type.GetCustomAttributes<BindPropertyAttribute>()) { var childProp = a.GetSourcePropertyInfo(type); var v = childProp.GetValue(targetObject, null); var pdcs = TypeDescriptor.GetProperties(v, false); var bpd = new BindPropertyDescriptor(pdcs[a.Property], childProp, a.DisplayName, a.Description, a.Category); bpd.ValueChanging += Property_ValueChanging; pdc.Add(bpd); } __TypedDescriptorCollection.Add(type, pdc); } _DescriptorCollection = pdc; }