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); }
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); } }