WPF DataGrid работает медленно при выделении всех строк (около 200) - PullRequest
0 голосов
/ 12 июня 2019

У меня есть DataGrid, который содержит около 200 строк, и когда я пытаюсь выбрать все (Ctrl + A), это занимает около 5 секунд. Рендеринг строк быстрый, но не выделение. До сих пор я проверял конвертер, события и привязки, но при выборе ничего не вызывалось. Есть идеи?

Edit: Вот кусок кода.

ViewModel имеет свойство:

        private ObservableCollection<BlaBla> items;
        public ObservableCollection<BlaBla> Items
        {
            get { return items; }
            set { items = value; NotifyPropertyChanged(); }
        }

Это свойство устанавливается один раз.

XAML выглядит так:

    <DataGrid AutoGenerateColumns="False" CanUserAddRows="False" CanUserDeleteRows="{Binding IsPerformingSimulations, Converter={StaticResource boolToBoolInvert}}" CanUserReorderColumns="False"
              CanUserResizeColumns="True" CanUserResizeRows="False" CanUserSortColumns="True" GridLinesVisibility="All" SelectionMode="Extended" SelectionUnit="FullRow"
              ItemsSource="{Binding Items}" VirtualizingStackPanel.IsVirtualizing="True">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Bla1" Binding="{Binding Bla1Prop}" IsReadOnly="True" />
            <DataGridTextColumn Header="Bla2" Binding="{Binding Bla2Prop}" IsReadOnly="True" />
            <DataGridTextColumn Header="Bla3" Binding="{Binding Bla3Prop}" IsReadOnly="True" />
            <DataGridTextColumn Header="Bla4" Binding="{Binding Bla4Prop}" IsReadOnly="True" />
            <DataGridTextColumn Header="Bla5" Binding="{Binding Bla5Prop}" IsReadOnly="True" />
        </DataGrid.Columns>
    </DataGrid>

Редактировать 2: Так, на всякий случай. C # 7.3, .NET 4.7.1 и Windows 7 64bit.

1 Ответ

0 голосов
/ 12 июня 2019

После нескольких часов поиска я нашел проблему. Класс, который находится в ObservableCollection, переопределил GetHash и Equals, и похоже, что действие select в DataGrid вызывает эти методы для каждой строки при выделении.

Редактировать: ... или даже для каждой ячейки!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...