Exemplo n.º 1
0
        private static bool Compare(object leftOperand, ComparisonConditionType operatorType, object rightOperand)
        {
            if (leftOperand != null && rightOperand != null)
            {
                rightOperand = TypeConverterHelper.Convert(rightOperand.ToString(), leftOperand.GetType().FullName);
            }

            IComparable leftComparableOperand  = leftOperand as IComparable;
            IComparable rightComparableOperand = rightOperand as IComparable;

            if ((leftComparableOperand != null) && (rightComparableOperand != null))
            {
                return(DataTriggerBehavior.EvaluateComparable(leftComparableOperand, operatorType, rightComparableOperand));
            }

            switch (operatorType)
            {
            case ComparisonConditionType.Equal:
                return(object.Equals(leftOperand, rightOperand));

            case ComparisonConditionType.NotEqual:
                return(!object.Equals(leftOperand, rightOperand));

            case ComparisonConditionType.LessThan:
            case ComparisonConditionType.LessThanOrEqual:
            case ComparisonConditionType.GreaterThan:
            case ComparisonConditionType.GreaterThanOrEqual:
            {
                if (leftComparableOperand == null && rightComparableOperand == null)
                {
                    throw new ArgumentException(string.Format(
                                                    CultureInfo.CurrentCulture,
                                                    ResourceHelper.InvalidOperands,
                                                    leftOperand != null ? leftOperand.GetType().Name : "null",
                                                    rightOperand != null ? rightOperand.GetType().Name : "null",
                                                    operatorType.ToString()));
                }
                else if (leftComparableOperand == null)
                {
                    throw new ArgumentException(string.Format(
                                                    CultureInfo.CurrentCulture,
                                                    ResourceHelper.InvalidLeftOperand,
                                                    leftOperand != null ? leftOperand.GetType().Name : "null",
                                                    operatorType.ToString()));
                }
                else
                {
                    throw new ArgumentException(string.Format(
                                                    CultureInfo.CurrentCulture,
                                                    ResourceHelper.InvalidRightOperand,
                                                    rightOperand != null ? rightOperand.GetType().Name : "null",
                                                    operatorType.ToString()));
                }
            }
            }

            return(false);
        }
Exemplo n.º 2
0
        private void UpdatePropertyValue(object targetObject)
        {
            Type         targetType   = targetObject.GetType();
            PropertyInfo propertyInfo = targetType.GetRuntimeProperty(this.PropertyName.Path);

            this.ValidateProperty(targetType.Name, propertyInfo);

            Exception innerException = null;

            try
            {
                object   result           = null;
                string   valueAsString    = null;
                Type     propertyType     = propertyInfo.PropertyType;
                TypeInfo propertyTypeInfo = propertyType.GetTypeInfo();
                if (this.Value == null)
                {
                    // The result can be null if the type is generic (nullable), or the default value of the type in question
                    result = propertyTypeInfo.IsValueType ? Activator.CreateInstance(propertyType) : null;
                }
                else if (propertyTypeInfo.IsAssignableFrom(this.Value.GetType().GetTypeInfo()))
                {
                    result = this.Value;
                }
                else
                {
                    valueAsString = this.Value.ToString();
                    result        = propertyTypeInfo.IsEnum ? Enum.Parse(propertyType, valueAsString, false) :
                                    TypeConverterHelper.Convert(valueAsString, propertyType.FullName);
                }

                propertyInfo.SetValue(targetObject, result, new object[0]);
            }
            catch (FormatException e)
            {
                innerException = e;
            }
            catch (ArgumentException e)
            {
                innerException = e;
            }

            if (innerException != null)
            {
                throw new ArgumentException(string.Format(
                                                CultureInfo.CurrentCulture,
                                                ResourceHelper.ChangePropertyActionCannotSetValueExceptionMessage,
                                                this.Value != null ? this.Value.GetType().Name : "null",
                                                this.PropertyName,
                                                propertyInfo.PropertyType.Name),
                                            innerException);
            }
        }