ItemsControl, который загружает элементы один за другим асинхронно - PullRequest
0 голосов
/ 06 мая 2010

Я создаю собственную DataGrid, выводя WPF DataGrid на основе традиционного детектора. Я хочу, чтобы функциональность в сетке загружала элементы один за другим асинхронно, при этом, как только был изменен ItemSource, т. Е. Для свойства ItemsSource была установлена ​​новая коллекция, или связанная коллекция была изменена из-за элементов, которые были добавлены, перемещены или удалены (где уведомления поступают в сетку данных, когда базовый источник реализует INotifyCollectionChanged, например ObservableCollection).

Это потому, что даже при виртуализации стековой панели под сеткой данных требуется время для загрузки (задержка 2-3 секунды) для загрузки строк данных, когда в нем несколько столбцов, а некоторые основаны на шаблонах. При описанном выше поведении эта задержка «кажется» уменьшилась бы, давая сетке данных ощущение, что она имеет данные и достаточно отзывчива для их загрузки.

Как мне этого добиться?

Thx Vinit.

1 Ответ

0 голосов
/ 11 мая 2010

Звучит так, как будто вы ищете data virtualization ', что обычно означает создание собственного настраиваемого типа, похожего на IList, и выполнение большой работы по увлажнению объектов.

В результате ваши данные, отображаемые в сетке, будут выглядеть примерно так:

Index 0: new MyDataObject(0);
Index 1: new MyDataObject(1);

И MyDataObject реализует INotifyPropertyChanged.

В конструкторе вы делаете логику, необходимую для определения времени, графика или интерпретации, когда должны быть прочитаны реальные результаты. До тех пор вы возвращаете довольно пустые данные ... null и string.Empty из ваших свойств.

Затем, как только данные станут доступны (в идеале в фоновом потоке, читаются откуда угодно - ваши собственные локальные данные, или база данных, или веб-служба), вы сможете обновить реальные значения базовых свойств и запустить уведомления об изменении свойств, что пользовательский интерфейс загружается правильно.

Это слишком сложно, чтобы просто заскочить, поэтому некоторые поиски помогут. Надеюсь, это поможет вам.

...