/// <summary> /// Sets the backing field for a direct avalonia property, raising the /// <see cref="PropertyChanged"/> event if the value has changed. /// </summary> /// <typeparam name="T">The type of the property.</typeparam> /// <param name="property">The property.</param> /// <param name="field">The backing field.</param> /// <param name="value">The value.</param> /// <returns> /// True if the value changed, otherwise false. /// </returns> protected bool SetAndRaise <T>(AvaloniaProperty <T> property, ref T field, T value) { VerifyAccess(); if (EqualityComparer <T> .Default.Equals(field, value)) { return(false); } DeferredSetter <T> setter = Values.GetDirectDeferredSetter(property); return(setter.SetAndNotify(this, property, ref field, value)); }
private DeferredSetter<T> GetDeferredSetter<T>(AvaloniaProperty property) { if (_deferredSetters.TryGetValue(property, out var deferredSetter)) { return (DeferredSetter<T>)deferredSetter; } var newDeferredSetter = new DeferredSetter<T>(); _deferredSetters.AddValue(property, newDeferredSetter); return newDeferredSetter; }