예제 #1
0
        public void Apply(TValue value)
        {
            if (IsRemoved)
            {
                return;
            }

            var target = Target.GetTargetOrDefault();

            if (target is null)
            {
                return;
            }

            try
            {
                var settableValue = GetSettableValue(value);

                if (settableValue == null)
                {
                    settableValue = Property.PropertyType.GetDefaultValue();
                }
                else if (Property.PropertyType == typeof(string) && !(settableValue is string))
                {
                    settableValue = settableValue.ToStringOrEmpty();
                }
                else if (!Property.PropertyType.IsAssignableFrom(settableValue.GetType()))
                {
                    settableValue = Convert.ChangeType(settableValue, Property.PropertyType);
                }

                Property.SetValue(target, settableValue);
            }
            catch (Exception ex)
            {
                throw new($"Failed to apply the binding value of '{value}' on the {Property.Name} property of {target.GetType().FullName}", ex);
            }
        }