INotifyPropertyChanged can be a little painful to implement, although there are tools that can make it cleaner and less error prone (for example, PostSharp can automate the setter notification plumbing, so you donβt need to code them manually (there are no more line references in the installer), but tools like Resharper can perform renames, which also update references to a string with a property name.)
I personally implement this interface in my Model layer, although it is not consumed almost the same way by other model objects. In most cases, Model objects usually do not listen on a single property change; rather, they observe a general change in state, which may include several properties. Such a change is better notified by a specific event. However, I pretty often use INotifyCollectionChanged, exposing collections of objects in the public ObservableCollection classes and responding to change events, rather than creating a bunch of wrapper methods to access the private collection and update status.
source share