Basic concept would be, when user presses start button and a new list comes back from worker thread, it'd be added to a "list of lists" than would be showed up in a newly created tabitem. However I cannot seem to grab the datagrid on the newly created tabitem.....still could not figured out, FindName and whatever methods was tried
XAML
<TabControl x:Name="tabMain" Margin="8,63,10,10" IsSynchronizedWithCurrentItem="True" >
<TabControl.ContentTemplate>
<DataTemplate>
<Grid x:Name="grMain" Background="#FFE5E5E5">
<DataGrid x:Name="dgResults" IsReadOnly="True" AutoGenerateColumns="False" AlternatingRowBackground="#FFAAE8D5" ItemsSource="{Binding data}" >
<DataGrid.Columns>
<DataGridTextColumn Header="Key" Binding="{Binding col1}" Width="150">
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="TextBlock.TextWrapping" Value="Wrap" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="Value" Binding="{Binding col2}" Width="*">
<DataGridTextColumn.ElementStyle>
<Style>
<Setter Property="TextBlock.TextWrapping" Value="Wrap" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl >
CODE after getting the list
lstFinal.Add(e.Result as List<Col1Col2>);
TabItem newtab = new TabItem();
newtab.DataContext = lstFinal[lstFinal.Count - 1];
newtab.Header = txtMaterial.Text;
tabMain.Items.Add(newtab);
tabMain.SelectedIndex = tabMain.Items.Count - 1;
DataGrid dg = newtab.FindName("dgResults") as DataGrid;
dg.ItemsSource = lstFinal[lstFinal.Count - 1];