Kent wrote an interesting blog about this topic: View Models: POCOs versus DependencyObjects.
- DependencyObjects are not marked as serializable
- The DependencyObject class overrides and seals the Equals() and GetHashCode() methods
- A DependencyObject has thread affinity – it can only be accessed on the thread on which it was created
I prefer the POCO approach. A base class for PresentationModel (aka ViewModel) which implements INotifyPropertyChanged interface can be found here: http://compositeextensions.codeplex.com