|
Медленное выделение строк в DataGrid
|
|||
---|---|---|---|
#18+
Приветствую, коллеги! Столкнулся с весьма странным багом в DataGrid при выделении всех строк или относительно большого числа. Имеется DataGrid, например, с 200 строками и порядка 20 колонками. При нажатии Ctrl+A или выделении мышкой сразу всех подвисает на секунд 5. Рендеринг строк происходит быстро, но не выделение. Как пробовал побороть. Убирал все конверторы. Задавал настройки Visualization в разных комбинациях. Событий на DataGrid нет. Проверил Bindings, но нигде нет чего-либо, что исполнялось бы при выделении. Есть идеи, что может приводить к такому поведению DataGrid? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2019, 15:07 |
|
Медленное выделение строк в DataGrid
|
|||
---|---|---|---|
#18+
После нескольких часов мучений мне удалось найти причину. Класс, что в основе ObservableCollection имеет свое исполнение Equals и GetHashCode методов. Странно, но похоже, что при выделении строчки, эти методы вызываются, что тормозит весь процесс. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.06.2019, 17:37 |
|
Медленное выделение строк в DataGrid
|
|||
---|---|---|---|
#18+
может в виртуализации проблема, а не в методах? объекты коллекции это структуры? просто при нажатии Ctrl+A, на сколько я помню, происходит материализация всех элементов списка или DataGrid'а ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2019, 08:41 |
|
Медленное выделение строк в DataGrid
|
|||
---|---|---|---|
#18+
Roman Mejtes, С виртуализацией я пробовал всё возможное. Коллекция представлена в виде ObservableCollection<MyClass>. В MyClass методы GetHashCode и Equals были overriden, как только удалил "мои" методы, все заработало быстро. К сожалению, я не знаю, что именно происходит при нажатии Ctrl+A, но точно могу сказать, что GetHashCode вызывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2019, 15:55 |
|
Медленное выделение строк в DataGrid
|
|||
---|---|---|---|
#18+
эти методы используются для того, чтоб сравнивать дочерние элементы Selector'а, внутри хранятся списки\справочники выделенных элементов, текущий элемент и т.д. Будет лучше, если вы не будете переопределять эти методы, сделайте реализацию компаратора и используйте её. либо оберните свои объекты враппером. другого пути нет, это внутренняя реализация DataGrid контрола :( ... |
|||
:
Нравится:
Не нравится:
|
|||
13.06.2019, 16:10 |
|
|
start [/forum/topic.php?fid=21&msg=39826214&tid=1440325]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
1ms |
others: | 267ms |
total: | 376ms |
0 / 0 |