WPF custom DependencyProperty notify changes

dependency-properties, dependencyobject, notify, wpf

Solution

Bear with me for a second because it appears that you are trying to go against the grain of WPF. Since it seems you are writing code related to display logic, the typical method for getting related `DependencyObject`s to interact with one another is through bindings.

If, for example, `MyComponent` is a control of some sort and it uses the `Background` property in its `ControlTemplate`, you would use a `TemplateBinding` that references the `Background` property and any important sub-properties.

Since 1) you probably already know that and 2) you either aren't using templates or don't have them available, you can set up a binding in code in order to react to changes in to the `Background` property. If you provide more detail about what your `OnPropertyChanged` method does I can provide some sample code.

Problem

I have a class called MyComponent and it has a DependencyProperty caled BackgroundProperty. ``` public class MyComponent { public MyBackground Background { get { return (MyBackground)GetValue(BackgroundProperty); } set { SetValue(BackgroundProperty, value); } } public static readonly DependencyProperty BackgroundProperty = DependencyProperty.Register("Background", typeof(MyBackground), typeof(MyComponent), new FrameworkPropertyMetadata(default(MyBackground), new PropertyChangedCallback(OnPropertyChanged))); } ``` MyBackground is a class that derives from DependencyObject and it has some DependencyProperties. ``` public class MyBackground : DependencyObject { public Color BaseColor { set { SetValue(BaseColorProperty, value); } get { return (Color)GetValue(BaseColorProperty); } } public static readonly DependencyProperty BaseColorProperty = DependencyProperty.Register("BaseColor", typeof(Color), typeof(MyBackground ), new UIPropertyMetadata(Colors.White)); [...] } ``` Now, what I want is when a property from MyBackground is changed, MyComponent to be notified that MyBackground has changed and the PropertyChangedCallback named OnPropertyChanged to be called.

Original source