using System.Collections.Generic; using System.ComponentModel; using System.Runtime.CompilerServices; using JetBrains.Annotations; namespace DHT.Desktop.Models { public abstract class BaseModel : INotifyPropertyChanged { public event PropertyChangedEventHandler? PropertyChanged; [NotifyPropertyChangedInvocator] protected void OnPropertyChanged([CallerMemberName] string? propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } protected void Change(ref T field, T newValue, [CallerMemberName] string? propertyName = null) { if (!EqualityComparer.Default.Equals(field, newValue)) { field = newValue; OnPropertyChanged(propertyName); } } } }