У меня есть сетка данных со столбцом комбинированных списков, определенным так:
<DataGridTemplateColumn x:Name="AssortmentQualitySettingsDataGridColumn" Header="Kvaliteter">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding Path=QualityInfoAssortmentCollection}">
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding Path=ActiveQuality}"></CheckBox>
<TextBlock Text="{Binding Path=QualityName}" IsEnabled="False"></TextBlock>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
ItemsSource - это ObservableCollection объектов.Тексты для текстового поля в комбинированном ящике, тем не менее, редактируются в другой сетке данных и помещаются в другую коллекцию ObservableCollection с именем QualityItemCollection, и для получения обновленных комбинированных списков в сетке выше у меня есть событие в сетке данных, которое срабатывает при изменении этой коллекции.Это даже приводит к повторному чтению коллекции QualityInfoAssortmentCollection (необходимо также снова установить поле со списком, поэтому для его работы необходимо выполнить цикл).
Теперь, что происходит, когда в первый раз, когда данные загружаются, все хорошо и красиво, однако, когда обновление события QualityInfoAssortmentCollection сработало из вышеприведенных выпадающих списков, требуется 5-7 секунд, чтобы раскрыться при попытке получитьвнутрь.Само обновление я рассчитал, и на это уходит менее одной десятой секунды.У выпадающего списка не более 8-10 строк, и нет никакой разницы, пытаясь использовать виртуализированную панель стека, как это предлагается в другом месте.Сетка данных, отображающая ее, имеет около 10 строк, поэтому она даже близко не подходит к огромным объемам данных, которые необходимо перетасовать.
Редактировать: Дополнительные пояснения о невозможности использования определяющей коллекции QualityItemCollection.QualityItemColletion одинаково для всех элементов в приведенной выше сетке данных, но информация о том, какие флажки должны быть отмечены, установлена для каждого элемента в приведенной выше таблице.Поэтому я делаю копию QualityItemCollection в QualityItemAssortmentCollection, в которой также есть bool для флажка.Возможно, есть лучший способ сделать это?
Редактировать 2: Попробовал профилировщик WPF сейчас, и он зависает так же, как программа, и ничего не показывает в то время, когда программа делает странные вещи.Однако оказывается, что это то, что делает Visual Studio, поскольку, если я запускаю программу самостоятельно, а не через Visual Studio, отсрочка не происходит.Yay.