This method is not intended to generally detect individual property changes or perform invalidations of properties on a per-case basis. OnPropertyChanged is instead intended for modifications of the general invalidation pattern, if certain information is known about wide classifications of properties. For example, changes in a Freezable might be changes in the value types of the Freezable, or might be subproperties, where the changes are within other Freezable references. The Freezable override implementation of OnPropertyChanged uses internal information to determine whether the properties are subproperties, and provides appropriate base class logic for either case.
OnPropertyChanged is potentially invoked many times during the life of an object. Therefore, you can achieve better performance for the overall property system if you override the metadata of specific properties and then attach CoerceValueCallback or PropertyChangedCallback functions for individual properties. However, you would use this method if a DependencyObject includes a significant number of value-interrelated dependency properties, or if it includes logic such as rendering behavior that must be rerun for several related cases of property invalidations.
Notes to Inheritors:
Always call the base implementation. Failure to do this will significantly disable the entire WPF property system, causing incorrect values to be reported.
Important Note: |
|---|
The
OnPropertyChanged method has high potential for introducing reentrancy issues through your implementation. Avoid the following possible reentrancy cases when implementing:
Do not introduce modal
UI
or otherwise hold up the
UI
thread.
Do
not enter any message pump from within
OnPropertyChanged
. Message responses (in particular, native handling that you might not be aware of) might trigger further property changes.
|