There are a few places where we update the data from a background thread, and so we wanted the changed event to be raised on the main thread. It doesn't have to be thread-safe, but it would require is to make the handlers thread-safe, so this was the simplest route. On your own custom controls, you don't need to make them thread-safe unless you really need it As for the reason for the INotifyPropertyChanged event, we had to use it because there is no RtfChanged event so if you want to bind to the property, the INotifyPropertyChanged is required to make the binding two-way.