/// <summary> /// Registers a dependency property. /// </summary> /// <typeparam name="T">The type of the property.</typeparam> /// <param name="name">The name of the property.</param> /// <param name="ownerType">The type that is registering the property.</param> /// <param name="defaultValue">The default value of the property.</param> /// <param name="validateValueCallback">A callback for validation/coercision of the property's value.</param> /// <param name="invalidationCallback">A callback to invalidate an object state after a modification of the property's value.</param> /// <param name="metadatas">The metadatas.</param> /// <returns></returns> public static PropertyKey <T> Register <T>(string name, Type ownerType, T defaultValue, ValidateValueCallback <T> validateValueCallback, ObjectInvalidationCallback <T> invalidationCallback, params PropertyKeyMetadata[] metadatas) { if (name == null) { throw new ArgumentNullException(nameof(name)); } if (ownerType == null) { throw new ArgumentNullException(nameof(ownerType)); } if (metadatas == null) { throw new ArgumentNullException(nameof(metadatas)); } return(RegisterCommon(DependencyPropertyKeyMetadata.Default, name, ownerType, defaultValue, validateValueCallback, invalidationCallback, metadatas)); }
// ReSharper disable once SuggestBaseTypeForParameter private static PropertyKey <T> RegisterCommon <T>(DependencyPropertyKeyMetadata dependencyPropertyMetadata, string name, Type ownerType, T defaultValue, ValidateValueCallback <T> validateValueCallback, ObjectInvalidationCallback <T> invalidationCallback, params PropertyKeyMetadata[] otherMetadatas) { var metadataList = new List <PropertyKeyMetadata> { dependencyPropertyMetadata, DefaultValueMetadata.Static(defaultValue) }; if (validateValueCallback != null) { metadataList.Add(ValidateValueMetadata.New(validateValueCallback)); } if (invalidationCallback != null) { metadataList.Add(ObjectInvalidationMetadata.New(invalidationCallback)); } metadataList.AddRange(otherMetadatas); return(new PropertyKey <T>(name, ownerType, metadataList.ToArray())); }
public static PropertyKey <T> Register <T>(string name, Type ownerType, T defaultValue, ObjectInvalidationCallback <T> invalidationCallback) { return(Register(name, ownerType, defaultValue, null, invalidationCallback)); }
public static ObjectInvalidationMetadata New <T>([NotNull] ObjectInvalidationCallback <T> invalidationCallback) { return(new ObjectInvalidationMetadata <T>(invalidationCallback)); }