I have a WPF DataGrid with some data. You can add rows through a separate window. The DataContext is the same, a LINQ-to-SQL object. Binding is also the same, I bind the "ItemsSource" property to a table.
In the other window, when the user clicks on "Save", I create a row programatically and add it using "InsertOnSubmit". After that I use the DataContext's "SubmitChanges" method.
My problem is that the DataGrid isn't updated. If I restart the application I can see the new row, so it's in the database, but I couldn't find a way to refresh the DataGrid.
So far I've tried to use "UpdateTarget" on the BindingExpression of the DataGrid, but it didn't help. I've also tried "dataGrid.Items.Refresh()" — same result. How can I fix this?
解决方案
The reason it's not updating is that LINQ-to-SQL doesn't implement INotifyCollectionChanged, so WPF has no way to tell that the ItemsSource has been updated. The least terrifying way to fix this, is to copy your LINQ-to-SQL results to an ObservableCollection - when you do the Insert, also add to the observable collection. Then you'll see the update.