2014-10-29 2 views
0

Я работаю с WPF DataGrid и .Net 4.5, и я пытаюсь запустить собственный контейнер виртуализации данных для большой коллекции. Я был повсюду в Интернете и нашел много полезных примеров того, как реализовать виртуализацию данных, но в каждом примере, который я видел, экономия теряется, если вы производите группировку. Моя группировка проста и статична. Есть ли способ подделать группировку в WPF таким образом, что моей коллекции не нужно перечислять все элементы раньше времени? Например, кто-нибудь когда-либо переопределял ListCollectionViewGetItemAt() и только что вернул объект CollectionViewGroup в начале каждой группы?Как создать пользовательскую (плоскую) коллекцию, которая включает в себя группировку?

Конкретный пример:

  1. Скажем, например, у меня есть база данных с 100K записей. Я хочу создать коллекцию виртуализации данных, подобную Bea Stollnitz' example, и использовать ее в WPF DataGrid.
  2. Я хочу группировать элементы в DataGrid в поле, но я могу это сделать, изменив запрос базы данных, чтобы сначала вернуть все элементы в группе A, а затем все элементы группы B. Группирование выполняется до того, как DataTable даже видит это ,
  3. Как визуально представлять группировку внутри DataGrid WPF, хотя моя коллекция (с точки зрения DataGrid) плоская? Единственный способ показать группировку в DataGrid - это использовать CollectionView или подобное.

.

+0

Так что я думаю, что, возможно, наконец (после 3 дней поиска) нашел работоспособный ответ, [эта ссылка] (http://blog.smoura.com/wpf-toolkit-datagrid-part-iv-templatecolumns-and -row-grouping /) из [StackOverflow] (http://stackoverflow.com/a/7000681/999613). Особенно полезен раздел «Поддельная группировка с помощью ViewModel». – millejos

ответ

1

Если вы имеете дело с плоским списком и статическим сгруппированным списком и обеспокоены производительностью, связанной с агрегацией, я бы подумал о сохранении обеих версий наборов данных в индексе и просто захватить в зависимости от того, что вам нужно для каждого конкретного дело.