コード例 #1
0
        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();
            }
        }