4 ways to implement INotifyPropertyChanged.
Simple, manual, one file, novice INotifyPropertyChanged implementation.
Real life INotifyPropertyChanged implementation using base class.
More complex solution that uses interceptors and dynamically genereted proxy objects.
Post build engine solution using PropertyChanged.Fody and [ImplementPropertyChanged] attribute.