Kent wrote an interesting blog about this topic: View Models: POCOs versus DependencyObjects.
Short summary:
- 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