NotifyingBase.cs 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #nullable enable
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Linq;
  5. using System.Runtime.CompilerServices;
  6. namespace Avalonia.UnitTests
  7. {
  8. public class NotifyingBase : INotifyPropertyChanged
  9. {
  10. private PropertyChangedEventHandler? _propertyChanged;
  11. public event PropertyChangedEventHandler? PropertyChanged
  12. {
  13. add
  14. {
  15. _propertyChanged += value;
  16. ++PropertyChangedSubscriptionCount;
  17. }
  18. remove
  19. {
  20. if (_propertyChanged?.GetInvocationList().Contains(value) == true)
  21. {
  22. _propertyChanged -= value;
  23. --PropertyChangedSubscriptionCount;
  24. }
  25. }
  26. }
  27. public int PropertyChangedSubscriptionCount
  28. {
  29. get;
  30. private set;
  31. }
  32. public void RaisePropertyChanged([CallerMemberName] string? propertyName = null)
  33. {
  34. _propertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  35. }
  36. protected bool SetField<T>(ref T field, T value, [CallerMemberName] string? propertyName = null)
  37. {
  38. if (EqualityComparer<T>.Default.Equals(field, value))
  39. return false;
  40. field = value;
  41. RaisePropertyChanged(propertyName);
  42. return true;
  43. }
  44. }
  45. }