protected override void InitializeInternal() { base.InitializeInternal(); // Note: This is attempting to add support for items which become disabled when other // items are set to specific values. This will need extending to support listening to multiple items. PropertyDescriptorCollection descriptors = null; var groupEnableAttribute = Descriptor.Attributes.OfType <GroupEnabledAttribute>().FirstOrDefault(); if (groupEnableAttribute != null) { descriptors = new PropertyDescriptorCollection(PropertyUtils.GetProperties(Instances.Cast <object>()).ToArray()); m_groupEnableAttributes = groupEnableAttribute.GroupEnables; var groupEnables = new List <GroupEnables>(); var masters = new List <PropertyDescriptor>(); foreach (var groupEnable in groupEnableAttribute.GroupEnables) { var desc = descriptors[groupEnable.GroupName]; if (desc != null) { groupEnables.Add(groupEnable); masters.Add(desc); } else { Debug.WriteLine("PropertyNode: Descriptor not found: " + groupEnable.GroupName); } } m_groupEnableAttributes = groupEnables.ToArray(); m_masterGroups = masters.ToArray(); SetGroupEnabledState(); } var dependencyAttribute = Descriptor.Attributes.OfType <DependencyAttribute>().FirstOrDefault(); if (dependencyAttribute != null) { if (descriptors == null) { descriptors = new PropertyDescriptorCollection(PropertyUtils.GetProperties(Instances.Cast <object>()).ToArray()); } var groups = new List <PropertyDescriptor>(); foreach (var descriptorName in dependencyAttribute.DependencyDescriptors) { var desc = descriptors[descriptorName]; if (desc != null) { groups.Add(desc); } else { Debug.WriteLine("PropertyNode: Descriptor not found: " + descriptorName); } } m_dependencyGroups = groups.ToArray(); } }