Here are my comments
1) Since there is only 1 thread in the pump message, you do not need to worry about full or partial fences, and the volatile keyword has no effect.
2) INotifyPropertyChanged refers to events, and if one delegate in the list of event calls fails, the rest will not be called because the effect will not be updated.
3) If you use nested pump messages (for example, modal windows), then the child manager can update your property to the parent manager, thereby making the update unsynchronized with the expected one.
4) if you use IValueConverter and the conversion fails, your property will not be updated.
5) If you use explicit update triggers in your bindings, this can have an effect (depending on your scenario)
Dean chalk
source share