In V4, there will be a way to avoid using string, but rather with the syntax RaisePropertyChanged(vm => vm.MyProperty).

However, already in V3 the risk when refactoring is small:

If a property is raised, but does not actually exists on the VM, an exception is thrown. This check is only made in DEBUG configuration but should allow to catch all errors.

In addition, the strings are declared as constants (using the code snippets provided), so changing one is quite easy.

The reason why I am not using reflection for the moment is that the impact on perf can be an issue, especially on small systems (like the phones). But still, by popular demand, there will be the way I described above in V4 (as an optional possibility to
raise the PropertyChanged event).

I like Aurimas86's solution; it cuts down a lot of the very repetitive code needed to check that a property's value has changed before calling RaisePropertyChanged. Additionally, as Aurimas86 observes, the StackTrace solution is
broken in Release mode, which you could regard as a bit of a show-stopper!