/// <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));
        }
Exemple #2
0
        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;
        }