Ejemplo n.º 1
0
        private void FillSignalProperties(SignalRule signalRule)
        {
            this.ElementProperties.ToList().ForEach(property => property.PropertyChanged -= this.ElementPropertyChanged);
            this.ElementProperties.Clear();

            if (signalRule != null)
            {
                ElementProperties properties     = new ElementProperties();
                PropertyInfo[]    propertiesInfo = null;

                switch (signalRule.ValueType)
                {
                case ValueDataType.Integer:
                    propertiesInfo = signalRule.GetType().GetIntegerProperties();
                    this.Clear(ValueDataType.Datetime | ValueDataType.String, signalRule);
                    break;

                case ValueDataType.String:
                    propertiesInfo = signalRule.GetType().GetStringProperties();
                    this.Clear(ValueDataType.Integer | ValueDataType.Datetime, signalRule);
                    break;

                case ValueDataType.Datetime:
                    propertiesInfo = signalRule.GetType().GetDateTimeProperties();
                    this.Clear(ValueDataType.Integer | ValueDataType.String, signalRule);
                    break;

                default:
                    propertiesInfo = signalRule.GetType().GetExemptProperties();
                    this.Clear(ValueDataType.Integer | ValueDataType.String | ValueDataType.Datetime, signalRule);
                    break;
                }

                foreach (PropertyInfo propertyInfo in propertiesInfo)
                {
                    ElementProperty elementProperty = null;

                    if (propertyInfo.PropertyType.IsEnum)
                    {
                        elementProperty = this.GetComboBoxProperty(signalRule, propertyInfo);
                    }
                    else if (propertyInfo.PropertyType == typeof(double?))
                    {
                        elementProperty = this.GetDoubleProperty(signalRule, propertyInfo);
                    }
                    else if (propertyInfo.PropertyType == typeof(int?))
                    {
                        elementProperty = this.GetIntegerProperty(signalRule, propertyInfo);
                    }
                    else if (propertyInfo.PropertyType.IsArray)
                    {
                        switch (propertyInfo.PropertyType.Name)
                        {
                        case "String[]":
                            elementProperty = this.GetArrayTextProperty(signalRule, propertyInfo);
                            break;

                        default:
                            break;
                        }
                    }
                    else
                    {
                        elementProperty = this.GetTextProperty(signalRule, propertyInfo);
                    }

                    properties.Add(elementProperty);
                }

                this.ElementProperties = properties;

                this.ElementProperties.ToList().ForEach(property =>
                {
                    if (!property.IsReadOnly)
                    {
                        property.PropertyChanged += this.ElementPropertyChanged;
                    }
                });
            }

            this.PrimaryCommand.RaiseCanExecuteChanged();
        }