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