1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
public class ObservableProperty<T> { private T _value; public event Action<T> ValueChanged; public T Value { get => _value; set { if (!EqualityComparer<T>.Default.Equals(_value, value)) { _value = value; ValueChanged?.Invoke(_value); } } } }