protected void Set <T>(ref T field, T value, Action <T> changeHandler, [CallerMemberName] string propertyName = null) where T : IEquatable <T> { var oldValue = field; if (PropertyChanged.TryUpdate(this, ref field, value, propertyName)) { changeHandler?.Invoke(oldValue); } }
/// <summary> /// Utility function to make writing property updates easier. /// If the backing field's value does not match the new value, the backing field is updated and PropertyChanged gets called. /// </summary> /// <typeparam name="T">The type of the property being updated.</typeparam> /// <param name="backingField">A reference to the backing field of the property being changed.</param> /// <param name="newValue">The new value for the property.</param> /// <param name="propertyName">The name of the property to notify on. If the property is the caller, the compiler will figure this parameter out automatically.</param> /// <returns>false if the data did not need to be updated, true if it did.</returns> protected bool TryUpdate <T>(ref T backingField, T newValue, [CallerMemberName] string propertyName = null) where T : IEquatable <T> { return(PropertyChanged.TryUpdate(this, ref backingField, newValue, propertyName)); }