/// <summary> /// Registers a direct <see cref="AvaloniaProperty"/>. /// </summary> /// <typeparam name="TOwner">The type of the class that is registering the property.</typeparam> /// <typeparam name="TValue">The type of the property's value.</typeparam> /// <param name="name">The name of the property.</param> /// <param name="getter">Gets the current value of the property.</param> /// <param name="setter">Sets the value of the property.</param> /// <param name="unsetValue"> /// The value to use when the property is set to <see cref="AvaloniaProperty.UnsetValue"/> /// </param> /// <param name="defaultBindingMode">The default binding mode for the property.</param> /// <returns>A <see cref="AvaloniaProperty{TValue}"/></returns> public static DirectProperty <TOwner, TValue> RegisterDirect <TOwner, TValue>( string name, Func <TOwner, TValue> getter, Action <TOwner, TValue> setter = null, TValue unsetValue = default(TValue), BindingMode defaultBindingMode = BindingMode.OneWay) where TOwner : IAvaloniaObject { Contract.Requires <ArgumentNullException>(name != null); var metadata = new DirectPropertyMetadata <TValue>( unsetValue: unsetValue, defaultBindingMode: defaultBindingMode); var result = new DirectProperty <TOwner, TValue>(name, getter, setter, metadata); AvaloniaPropertyRegistry.Instance.Register(typeof(TOwner), result); return(result); }
/// <summary> /// Registers the direct property on another type. /// </summary> /// <typeparam name="TNewOwner">The type of the additional owner.</typeparam> /// <param name="getter">Gets the current value of the property.</param> /// <param name="setter">Sets the value of the property.</param> /// <param name="unsetValue"> /// The value to use when the property is set to <see cref="AvaloniaProperty.UnsetValue"/> /// </param> /// <param name="defaultBindingMode">The default binding mode for the property.</param> /// <param name="enableDataValidation"> /// Whether the property is interested in data validation. /// </param> /// <returns>The property.</returns> public DirectProperty <TNewOwner, TValue> AddOwner <TNewOwner>( Func <TNewOwner, TValue> getter, Action <TNewOwner, TValue> setter = null, TValue unsetValue = default(TValue), BindingMode defaultBindingMode = BindingMode.OneWay, bool enableDataValidation = false) where TNewOwner : AvaloniaObject { var result = new DirectProperty <TNewOwner, TValue>( this, getter, setter, new DirectPropertyMetadata <TValue>( unsetValue: unsetValue, defaultBindingMode: defaultBindingMode, enableDataValidation: enableDataValidation)); AvaloniaPropertyRegistry.Instance.Register(typeof(TNewOwner), result); return(result); }
/// <summary> /// Registers the direct property on another type. /// </summary> /// <typeparam name="TNewOwner">The type of the additional owner.</typeparam> /// <param name="getter">Gets the current value of the property.</param> /// <param name="setter">Sets the value of the property.</param> /// <param name="unsetValue"> /// The value to use when the property is set to <see cref="AvaloniaProperty.UnsetValue"/> /// </param> /// <param name="defaultBindingMode">The default binding mode for the property.</param> /// <param name="enableDataValidation"> /// Whether the property is interested in data validation. /// </param> /// <returns>The property.</returns> public DirectProperty <TNewOwner, TValue> AddOwnerWithDataValidation <TNewOwner>( Func <TNewOwner, TValue> getter, Action <TNewOwner, TValue> setter, TValue unsetValue = default(TValue), BindingMode defaultBindingMode = BindingMode.Default, bool enableDataValidation = false) where TNewOwner : AvaloniaObject { var metadata = new DirectPropertyMetadata <TValue>( unsetValue: unsetValue, defaultBindingMode: defaultBindingMode, enableDataValidation: enableDataValidation); metadata.Merge(GetMetadata <TOwner>(), this); var result = new DirectProperty <TNewOwner, TValue>( this, getter, setter, metadata); AvaloniaPropertyRegistry.Instance.Register(typeof(TNewOwner), result); return(result); }