Why are .NET property wrappers bypassed at runtime when setting dependency properties in XAML?

The explanation is given in XAML Loading and Dependency Properties:

The current WPF implementation of its XAML processor is inherently
dependency property aware. The WPF XAML processor uses property system
methods for dependency properties when loading binary XAML and
processing attributes that are dependency properties. This effectively
bypasses the property wrappers. When you implement custom dependency
properties, you must account for this behavior and should avoid
placing any other code in your property wrapper other than the
property system methods GetValue and SetValue.

and:

For implementation reasons, it is computationally less expensive to
identify a property as a dependency property and access the property
system SetValue method to set it, rather than using the property
wrapper and its setter. This is because a XAML processor must infer
the entire object model of the backing code based only on knowing the
type and member relationships that are indicated by the structure of
the markup and various strings.

Leave a Comment