I think Blam is right. (Sorry I don't have privileges to add comments yet.) In your test code, you use an ObservableCollection, which does implement INotifyPropertyChanged. The DataGrid will pick up changes to that collection. You should consider using an ObservableCollection in your real code and updating the data through it to be picked up by the bound DataGrid, rather than directly through dataGrid.ItemsSource.
The approach in the answer on this page may help: https://stackoverflow.com/a/1581588/1082026
In the end, your code may look something like this (note, you'll have to define a class DataItem that would mirror a row in your DataSet's DataTable, specifically with the properties your DataGrid cares about):
private ObservableCollection<DataItem> dataItems= new ObservableCollection<DataItem>();
public ObservableCollection<DataItem> DataItems
{
get { return this.dataItems; }
set
{
this.dataItems = value;
base.OnPropertyChanged("DataItems");
}
}
With this binding
<DataGrid x:Name="dataGrid" ItemsSource="{Binding TestData}".../>
And if you don't want to deal with Add() and Remove(), this would be how you set the collection:
IList<DataItem> items = BuildDataGridColumns(cultureDict).Tables[0].AsDataView();
this.DataItems = new ObservableCollection<DataItem>(items);
...
private IList<DataItem> BuildDataGridColumns(Dictionary<string, string> cultureDict,
DataTable additionalDt = null)
{
// ... here create a list of DataItems from your table, and return it.
}
Hope that helps!