Add a normal datagrid to the form that can virtualize. Everything was done in a couple of clicks was. Create a data source for an Objects.cs object and drag a sheet onto the form. Everything is created automatically.
<Grid DataContext="{StaticResource rootObjectLekarstvoViewSource}"> <DataGrid x:Name="listDataGrid" AutoGenerateColumns="False" EnableRowVirtualization="True" ItemsSource="{Binding Source={StaticResource rootObjectLekarstvolistViewSource}}" Margin="0,109,117,10" RowDetailsVisibilityMode="VisibleWhenSelected"> <DataGrid.Columns> <DataGridTextColumn x:Name="byeLinkColumn" Binding="{Binding byeLink}" Header="bye Link" Width="SizeToHeader"/> <DataGridTextColumn x:Name="drug_codeColumn" Binding="{Binding drug_code}" Header="drug code" Width="SizeToHeader"/> <DataGridCheckBoxColumn x:Name="isOnColumn" Binding="{Binding isOn}" Header="is On" Width="SizeToHeader"/> <DataGridCheckBoxColumn x:Name="online_storeColumn" Binding="{Binding online_store}" Header="online store" Width="SizeToHeader"/> <DataGridTextColumn x:Name="priceColumn" Binding="{Binding price}" Header="price" Width="SizeToHeader"/> <DataGridCheckBoxColumn x:Name="reserveLinkColumn" Binding="{Binding reserveLink}" Header="reserve Link" Width="SizeToHeader"/> <DataGridTextColumn x:Name="updatedColumn" Binding="{Binding updated}" Header="updated" Width="SizeToHeader"/> </DataGrid.Columns> </DataGrid> <Button x:Name="button" Content="Button" HorizontalAlignment="Left" Margin="155,255,0,0" VerticalAlignment="Top" Width="75" Click="button_Click"/> </Grid>
private async void button_Click(object sender, RoutedEventArgs e) { var json = await new HttpClient().GetStringAsync("http://contrib.gpor.ru/pharmacyImport/feed/pharmacyFeed_60.json"); var data = JsonConvert.DeserializeObject<RootObjectLekarstvo>(json); listDataGrid.ItemsSource = data.list; }
At the output, 10k of data was downloaded from the Internet and added to the table asynchronously, the interface did not hang.