Unlike the Highlander there can be more than one Dispatcher. Just because you invokeSystem.Windows.Threading.Dispatcher.CurrentDispatcher does not mean you will always get the Dispatcher responsible for executing tasks on the logical tree.
Consider this example:
As expected the UI shows the following window. And this window's text does not change.
What is the moral of the story?
Keep a reference to the dispatcher from a known point inside the controller for your xaml. Or you can get it from any derivative of DispatcherObject (which is the root object of all Xaml components).