Most of the time you don't need the Dispatcher in a ViewModel (> 99% of the time). Earlier versions of .NET didn't marshal PropertyChanged events to the UI thread appropriately, which caused issues. There was a way around it, which required you to raise that event in a way that was aware of the Dispatcher and could automatically marshal when needed. .NET 3.5 and above do this automatically now.
Because the Dispatcher is a UI concept, its presence in a ViewModel is a huge code smell. It suggests that you are doing something wrong. More likely, you either need to inject something which abstracts your ViewModel from the UI resource you are manipulating (changing the mouse cursor is a good example), or you've actually coupled the View to the ViewModel. In the latter case, you can usually fix this with some kind of attached behaviour which will subscribe to events and property changes on your ViewModel.
There is a hangup with this... CollectionChanged does have thread affinity (indirectly through CollectionViews which get automatically created by WPF), and the best way around this is to check for SynchronizationContexts on the event delegate subsribers when raising that event. It stinks, but it still doesn't require you to pass the Dispatcher to the VM.