| File: Interactivity\Behavior.cs | Web Access |
| Project: src\src\Controls\src\Core\Controls.Core.csproj (Microsoft.Maui.Controls) |
#nullable disable using System; namespace Microsoft.Maui.Controls { /// <summary> /// Base class for generalized user-defined behaviors that can respond to arbitrary conditions and events. /// </summary> /// <remarks>Application developers should specialize the <see cref="Behavior{T}" /> generic class, instead of directly using <see cref="Behavior" />.</remarks> public abstract class Behavior : BindableObject, IAttachedObject { /// <summary> /// Creates a new <see cref="Behavior" /> with default values. /// </summary> protected Behavior() : this(typeof(BindableObject)) { } internal Behavior(Type associatedType) => AssociatedType = associatedType ?? throw new ArgumentNullException(nameof(associatedType)); /// <summary> /// Gets the type of the objects with which this <see cref="Behavior" /> can be associated. /// </summary> protected Type AssociatedType { get; } void IAttachedObject.AttachTo(BindableObject bindable) { if (bindable == null) throw new ArgumentNullException(nameof(bindable)); if (!AssociatedType.IsInstanceOfType(bindable)) throw new InvalidOperationException("bindable not an instance of AssociatedType"); OnAttachedTo(bindable); } void IAttachedObject.DetachFrom(BindableObject bindable) => OnDetachingFrom(bindable); /// <summary> /// Application developers override this method to implement the behaviors that will be associated with <paramref name="bindable" />. /// </summary> /// <param name="bindable">The bindable object to which the behavior was attached.</param> protected virtual void OnAttachedTo(BindableObject bindable) { } /// <summary> /// Application developers override this method to remove the behaviors from <paramref name="bindable" /> /// that were implemented in a previous call to the <see cref="OnAttachedTo(BindableObject)"/> method. /// </summary> /// <param name="bindable">The bindable object from which the behavior was detached.</param> protected virtual void OnDetachingFrom(BindableObject bindable) { } } /// <inheritdoc/> /// <typeparam name="T">The type of object this behavior will be applied to.</typeparam> public abstract class Behavior<T> : Behavior where T : BindableObject { /// <inheritdoc/> protected Behavior() : base(typeof(T)) { } /// <inheritdoc/> protected override void OnAttachedTo(BindableObject bindable) { base.OnAttachedTo(bindable); OnAttachedTo((T)bindable); } /// <summary> /// Application developers override this method to implement the behaviors that will be associated with <paramref name="bindable" />. /// </summary> /// <param name="bindable">The bindable object to which the behavior was attached.</param> protected virtual void OnAttachedTo(T bindable) { } /// <inheritdoc/> protected override void OnDetachingFrom(BindableObject bindable) { OnDetachingFrom((T)bindable); base.OnDetachingFrom(bindable); } /// <summary> /// Application developers override this method to remove the behaviors from <paramref name="bindable" /> /// that were implemented in a previous call to the <see cref="OnAttachedTo(T)"/> method. /// </summary> /// <param name="bindable">The bindable object from which the behavior was detached.</param> protected virtual void OnDetachingFrom(T bindable) { } } }