Медленно DataGrid С ~400 строк
ПРИВЕТ,
у меня есть очень медленный ItemsControl с 5 Датагридами в нем. (дисплеи рядом друг с другом) каждый раз, когда я обновляю этот элемент управления, весь мой пользовательский интерфейс сильно отстает (~10 секунд). Каждая Datagrid имеет ~50-400 элементов с предопределенными столбцами (не автоматически генерируемыми). Itemsources сеток обновляются одновременно.
Вот мой XAML:
<pre> <ScrollViewer Grid.Row="1"> <ItemsControl ItemsSource="{Binding}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <UniformGrid Columns="{Binding Count}"/> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <ItemsControl.ItemTemplate> <DataTemplate> <DataGrid ItemsSource="{Binding Content}" RowHeight="20" AutoGenerateColumns="False" VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.VirtualizationMode="Recycling"> <DataGrid.Columns> <DataGridTextColumn Header="name" Binding="{Binding Name}" Width="100" /> <DataGridTextColumn Header="value" Binding="{Binding Value}" Width="50" /> </DataGrid.Columns> </DataGrid> </DataTemplate> </ItemsControl.ItemTemplate> </ScrollViewer>
А вот код за спиной:
public partial class MainWindow : Window { public List<Folder> Folders { get; set; } public MainWindow() { InitializeComponent(); Folders = new List<Folder>(); Folders.Add(new Folder()); Folders.Add(new Folder()); this.DataContext = Folders; } private void Button_Click(object sender, RoutedEventArgs e) { Folders.ForEach(f => f.UpdateData()); } } public class Folder { private Random _rand = new Random(); public ObservableCollection<Content> Content { get; set; } public Folder() { Content = new ObservableCollection<Content>(); } public void UpdateData() { Content.Clear(); for(int i = 1; i <= 300; i++) Content.Add(new Content($"C{i}", _rand.Next(1,400))); } } public class Content { public string Name { get; set; } public int Value { get; set; } public Content(string name, int value) { Name = name; Value = value; } }
Pls найти также прилагается полный рабочий пример здесь.
Есть идеи, как я могу ускорить работу datagrids, не блокируя весь пользовательский интерфейс?
КР Ману
Что я уже пробовал:
Я попытался заменить datagrids списками, но пользовательский интерфейс все еще блокируется.
Ну, это не так уж долго блокирует, но мне нужно решение без блокировки вообще.