title: WPF DataGrid not updating on PropertyChanged
body: <p>i've a problem updating my datagrid when clicking the button by using NotifyPropertyChanged.
  It works if i set the DataGrid.ItemsSource in code behind, but it doesn't if i set it in xaml.
  here's some code of code behind &amp; xaml:</p>
  
  <pre><code>namespace MyWpfDataBindingLab
  {
  public partial class NpcWindow : Window
  {
      DataCollection dc = new DataCollection();
  
      public NpcWindow()
      {
          InitializeComponent();
          //command binding code
          //...
      }
  
      private void Window_Loaded(object sender, RoutedEventArgs e)
      {
          //if i set the ItemsSource here, updating of the UI works
          //dataGrid1.ItemsSource = dc;
      }
  
      private void CmdCollectionChangedExecute(object sender, ExecutedRoutedEventArgs e)
      {
          foreach (SampleClass s in dc)
          {
              s.Property1 = "changed";
              s.Property3 = "changed";
              s.Property3 = "changed";
              break;
          }
  
          dc.Add(new SampleClass("new sample 1", "new sample 2", "new sample 3"));
      }
  }
  }
  
  &lt;Window x:Class="WPFDataBinding.NpcWindow"
       xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:npc="clr-namespace:WPFDataBinding.NotifyPropChanged"
      Title="MainWindow" Height="189" Width="459" Loaded="Window_Loaded"&gt;
  &lt;Window.Resources&gt;
      &lt;npc:DataCollection x:Key="dataCol"/&gt;
  &lt;/Window.Resources&gt;
  &lt;Grid&gt;
      &lt;Grid.ColumnDefinitions&gt;
      &lt;/Grid.ColumnDefinitions&gt;
      &lt;Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="349,110,0,0" Name="button1" VerticalAlignment="Top" Width="75" /&gt;
      &lt;!-- if i set the ItemsSource here, updating of the UI doesn't work --&gt;
      &lt;DataGrid ItemsSource="{Binding Source={StaticResource dataCol}, Mode=OneWay, NotifyOnSourceUpdated=True, UpdateSourceTrigger=PropertyChanged}"
                AutoGenerateColumns="True" Height="103" HorizontalAlignment="Left" Margin="12,12,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="331" /&gt;
  &lt;/Grid&gt;
  </code></pre>
  
  <p></p>
  
  <p>my data &amp; NotifyPropertyChanged implementation:</p>
  
  <pre><code>namespace MyWpfDataBindingLab.NotifyPropChanged
  {    
  public class SampleClass : NotifyPropertyChanged
  {
      private string _field1;
      private string _field2;
      private string _field3;
  
      public string Property1
      { 
          get { return _field1; } 
          set 
          {
              _field1 = value;
              OnPropertyChanged("Property1");
          }
      }
  
      public string Property2
      { 
          get { return _field2; } 
          set 
          {
              _field2 = value;
              OnPropertyChanged("Property2");
          }
      }
  
      public string Property3
      { 
          get { return _field3; } 
          set 
          {
              _field3 = value;
              OnPropertyChanged("Property3");
          }
      }
  
      public SampleClass()
      {
          _field1 = "value1";
          _field2 = "value2";
          _field3 = "value3";
      }
  
      public SampleClass(string p1, string p2, string p3)
      {
          _field1 = p1;
          _field2 = p2;
          _field3 = p3;
      }
  }
  }
  
  namespace MyWpfDataBindingLab.NotifyPropChanged
  {
  public abstract class NotifyPropertyChanged : INotifyPropertyChanged
  {
      public event PropertyChangedEventHandler PropertyChanged;
  
      protected void OnPropertyChanged(string propertyName)
      {
          PropertyChangedEventHandler handler = PropertyChanged;
  
          if (handler != null)
          {
              handler(this, new PropertyChangedEventArgs(propertyName));
          }
      }
  }
  }
  
  namespace MyWpfDataBindingLab.NotifyPropChanged
  {
  public class DataCollection : ObservableCollection&lt;SampleClass&gt; 
  {
      public DataCollection()
      {
          this.Add(new SampleClass());
          this.Add(new SampleClass());
          this.Add(new SampleClass());
      }
  }
  }
  </code></pre>
  
  <p>i have no idea what the problem is. i'd appreciate it if someone can help solving my problem.</p>