title: Silverlight binding in a DataGridRowGroupHeader doesn't update when DataSource changes
body: <p>I have a Binding in a inline style for the DataGridRowGroupHeader like this.</p>
  
  <pre><code>&lt;sdk:DataGrid.RowGroupHeaderStyles&gt;
       &lt;Style TargetType="sdk:DataGridRowGroupHeader"&gt;
          &lt;Setter Property="Template"&gt;
       &lt;Setter.Value&gt;
               &lt;ControlTemplate TargetType="sdk:DataGridRowGroupHeader"&gt;
                             &lt;TextBlock Margin="4,0,0,0" Text="{Binding Converter={StaticResource headerConverter}}" /&gt;
  </code></pre>
  
  <p>The DataGrid ItemsSource is Bound to a PageCollectionView containing an observable collection, which is grouped by a property in the collection. When I update the collection the rows of the grid change, but the binding in the GroupHeader does not change.</p>
  
  <p>Is there a different way to bind this or a way to force the UI to update?</p>
  
  <p>This is the converter I'm using on the Header binding:</p>
  
  <pre><code> public class GroupHeaderConverter2 : IValueConverter {
  
  public object Convert(object value, System.Type targetType, object parameter, CultureInfo culture) {
  var cvg = value as CollectionViewGroup;
  
  return string.Format("({0} Remaining)", cvg.Items.Count((i) =&gt; ((CheckListEventDefinition)i).Complete == false &amp;&amp; ((CheckListEventDefinition)i).Required == true));
  }
  
  public object ConvertBack(object value,
          System.Type targetType,
          object parameter,
          CultureInfo culture) {
  return null;
  }
  </code></pre>
  
  <p>}</p>
  
  <p>Got this to work by changing the source collection to my own extended ObservableCollection that also monitors the elements for PropertyChanged and then raises the CollectionChanged Event.</p>
  
  <pre><code>/// &lt;summary&gt; this collection is also monitoring the elements for changes so when PropertyChanged fires on any element, it will raise the CollectionChanged event&lt;/summary&gt;
  public class ObservableCollectionEx&lt;T&gt; : ObservableCollection&lt;T&gt; where T : INotifyPropertyChanged {
  
      public ObservableCollectionEx(ObservableCollection&lt;T&gt; regularCollection) {
          if (regularCollection != null) {
              foreach (var item in regularCollection) {
                  this.Add(item);
              }
          }
      }
  
      public void RaiseCollectionChanged() {
          this.OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
      }
  
      protected override void OnCollectionChanged(NotifyCollectionChangedEventArgs e) {
          Unsubscribe(e.OldItems);
          Subscribe(e.NewItems);
          base.OnCollectionChanged(e);
      }
  
      protected override void ClearItems() {
          foreach (T element in this)
              element.PropertyChanged -= handlePropertyChanged;
  
          base.ClearItems();
      }
  
      private void Subscribe(IList iList) {
          if (iList == null) return;
          foreach (T element in iList)
              element.PropertyChanged += handlePropertyChanged;
      }
  
      private void Unsubscribe(IList iList) {
          if (iList == null) return;
          foreach (T element in iList)
              element.PropertyChanged -= handlePropertyChanged;
      }
  
      private void handlePropertyChanged(object sender, PropertyChangedEventArgs e) {
          OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset));
      }
  }
  </code></pre>