There are a couple solutions.
The simplest thing is to use a CslaDataProvider or ViewModelBase/ViewModel because these types already do all the work for you and expose auto-updating properties to make UI development easy.
Failing that, you'll need (for a general solution) to do what ViewModelBase (3.8.3) or CslaDataProvider do, which is to handle PropertyChanged, ChildChanged and CollectionChanged to universally detect when the underlying object graph has changed.
I don't recommend your approach - there may be unintended consequences of raising PropertyChanged for IsDirty (probably when binding to datagrid controls), and certainly hooking/unhooking all those events properly is non-trivial. Just look through the fun code that exists to make ChildChanged work - it is a serious PITA to get this right and not have nasty side effects.
Since we already did the work with ChildChanged, you are best off using that. But if it is your root object that changes, then you need PropertyChanged or CollectionChanged - which is why you need to handle all three to have a complete solution.
Copyright (c) Marimer LLC