title: DependencyProperties not firing callbacks as expected in UserControl
body: <p>I have a very simple example of a <code>DependencyProperty</code> I've registered on a UserControl which is not quite working as expected. </p>
  
  <p>I am binding this property to a DP (called Test) in MainWindow which seems to be firing the <code>OnPropertyChanged</code> events every time it is changed, but the <code>DependencyProperty</code> in my UserControl that is the target of this binding only seems to get notified the first time this property is changed.</p>
  
  <p>Here is what I'm trying to do in code:</p>
  
  <p>My UserControl:</p>
  
  <pre><code>public partial class UserControl1 : UserControl
  {
      public static readonly DependencyProperty ShowCategoriesProperty = 
          DependencyProperty.Register("ShowCategories", typeof(bool), typeof(UserControl1), new FrameworkPropertyMetadata(false, OnShowsCategoriesChanged));
  
      public UserControl1()
      {
          InitializeComponent();
      }
  
      public bool ShowCategories
      {
          get
          {
              return (bool)GetValue(ShowCategoriesProperty);
          }
          set
          {
              SetValue(ShowCategoriesProperty, value);
          }
      }
  
      private static void OnShowsCategoriesChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
      {
          //this callback is only ever hit once when I expect 3 hits...
  
          ((UserControl1)d).ShowCategories = (bool)e.NewValue;
      }
  }
  </code></pre>
  
  <p>MainWindow.xaml.cs</p>
  
  <pre><code>public partial class MainWindow : Window, INotifyPropertyChanged
  {
      public MainWindow()
      {
          InitializeComponent();
  
          Test = true;  //this call changes default value of our DP and OnShowsCategoriesChanged is called correctly in my UserControl
  
          Test = false;  //these following calls do nothing!! (here is where my issue is)
          Test = true;
      }
  
      private bool test;
      public bool Test
      {
          get { return test; }
          set
          {
              test = value;
              OnPropertyChanged("Test");
          }
      }
  
      public event PropertyChangedEventHandler PropertyChanged;
      protected void OnPropertyChanged(string property)
      {
          PropertyChangedEventHandler handler = PropertyChanged;
          if (handler != null)
          {
              handler(this, new PropertyChangedEventArgs(property));
          }
      }
  }
  </code></pre>
  
  <p>MainWindow.xaml</p>
  
  <pre><code>&lt;Window x:Class="Binding.MainWindow"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:uc="clr-namespace:Binding"
      DataContext="{Binding RelativeSource={RelativeSource Self}}"        
      Title="MainWindow" Height="350" Width="525"&gt;
    &lt;Grid&gt;
      &lt;uc:UserControl1 ShowCategories="{Binding Test}" /&gt;
    &lt;/Grid&gt;
  &lt;/Window&gt;
  </code></pre>