title: Editing a DataGrid in WPF causes a System.NullReferenceException
body: <p>I have a simple application that reads a list of Albums from a DataBase and fills a ListBox (AlbumShowCase).
  Whenever a ListBoxItem is selected I update a DataGrid (trackDataGrid) with the list of tracks in that Album (also from the DataBase).</p>
  
  <p>The problem is, I can edit the items in the DataGrid, and for all the existing tracks, changes are persistent. But if I try to add a new track, once I finish editing the row I get the System.NullReferenceException.</p>
  
  <pre><code>private TunesDBDataContext db;
  
  private void Window_Loaded(object sender, RoutedEventArgs e)
  {
      db = new TunesDBDataContext("TunesDB.sdf");
      var query = from a in db.Albums select new AlbumCase(a);
      AlbumShowCase.ItemsSource = query;
  }
  
  private void trackDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e)
  {
      db.SubmitChanges();
  }
  
  private void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
  {
      var query = from a in db.Albums
                  where a.AlbumID == ((AlbumCase)e.AddedItems[0]).Album.AlbumID
                  select a.Tracks;
  
      trackDataGrid.ItemsSource = query;
  }
  </code></pre>
  
  <p>The Exception occurs right after my ValueConverter:</p>
  
  <pre><code>[ValueConversion(typeof(String), typeof(int))]
  public class TimeConverter : IValueConverter
  {
      public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
      {
          int time = (int)value;
          TimeSpan ts = TimeSpan.FromSeconds(time);
          return ts.ToString();
      }
  
      public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
      {
          // The validation runs before this, so we know that if we got here
          // the data must be valid and won't throw an exception.
          return (int)TimeSpan.Parse((string)value).TotalSeconds;
          // THE EXCEPTION OCCURS AFTER THIS LINE FOR NEW ROWS
      }
  </code></pre>
  
  <p>The TimeConverter is paired with a TimeConverterRule that makes sure the track length entered is valid, and for all I know it's working fine.
  It's just when the user edits the LAST row (the empty one) of the DataGrid that the crash occurs. And here's the stack trace:</p>
  
  <pre><code>System.NullReferenceException was unhandled
  Message=Object reference not set to an instance of an object.
  Source=PresentationFramework
  StackTrace:
      at System.Windows.Data.BindingExpression.IsValidValueForUpdate(Object value, Type sourceType)
      at System.Windows.Data.BindingExpression.ConvertProposedValue(Object value)
      at System.Windows.Data.BindingExpression.ValidateAndConvertProposedValue(Collection1&amp; values)
      at System.Windows.Controls.DataGridHelper.ValidateWithoutUpdate(FrameworkElement element)
      at System.Windows.Controls.DataGridColumn.CommitCellEdit(FrameworkElement editingElement)
      at System.Windows.Controls.DataGridColumn.CommitEdit(FrameworkElement editingElement)
      at System.Windows.Controls.DataGridCell.CommitEdit()
      at System.Windows.Controls.DataGrid.OnExecutedCommitEdit(ExecutedRoutedEventArgs e)
      at System.Windows.Controls.DataGrid.OnExecutedCommitEdit(Object sender, ExecutedRoutedEventArgs e)
      at System.Windows.Input.CommandBinding.OnExecuted(Object sender, ExecutedRoutedEventArgs e)
      at System.Windows.Input.CommandManager.ExecuteCommandBinding(Object sender, ExecutedRoutedEventArgs e, CommandBinding commandBinding)
      at System.Windows.Input.CommandManager.FindCommandBinding(CommandBindingCollection commandBindings, Object sender, RoutedEventArgs e, ICommand command, Boolean execute)
      at System.Windows.Input.CommandManager.FindCommandBinding(Object sender, RoutedEventArgs e, ICommand command, Boolean execute)
      at System.Windows.Input.CommandManager.OnExecuted(Object sender, ExecutedRoutedEventArgs e)
      at System.Windows.UIElement.OnExecutedThunk(Object sender, ExecutedRoutedEventArgs e)
      at System.Windows.Input.ExecutedRoutedEventArgs.InvokeEventHandler(Delegate genericHandler, Object target)
      at System.Windows.RoutedEventArgs.InvokeHandler(Delegate handler, Object target)
      at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
      at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
      at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
      at System.Windows.UIElement.RaiseEvent(RoutedEventArgs args, Boolean trusted)
      at System.Windows.Input.RoutedCommand.ExecuteImpl(Object parameter, IInputElement target, Boolean userInitiated)
      at System.Windows.Input.RoutedCommand.Execute(Object parameter, IInputElement target)
      at System.Windows.Controls.DataGrid.EndEdit(RoutedCommand command, DataGridCell cellContainer, DataGridEditingUnit editingUnit, Boolean exitEditMode)
      at System.Windows.Controls.DataGrid.CommitAnyEdit()
      at System.Windows.Controls.DataGrid.OnEnterKeyDown(KeyEventArgs e)
      at System.Windows.Controls.DataGrid.OnKeyDown(KeyEventArgs e)
      etc...etc...
      }
  </code></pre>