Настраиваемая панель виртуализации для WinRT-XAML

Я пытаюсь создать функцию поиска в моих приложениях, но когда результат поиска выдает более 1000 строк, появляется сообщение об ошибке:

Exception   {"Not enough quota is available to process this command. (Exception from HRESULT: 0x80070718)"} System.Exception

я знаю, что это вызвано тем, что система пытается внести МНОГИЕ изменения в пользовательский интерфейс, и это слишком много, поэтому система завершила его, потому что для выполнения этого запроса потребуется много времени.

и я хорошо знаю об этом, потому что я использую пользовательский элемент управления wrapPanel, который измеряет каждую высоту элемента и создает блок в пользовательском интерфейсе, и когда я использую виртуализирующий элемент управления, такой как wrapgrid или virtualizingstackpanel, никакой ошибки не появляется..

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

извините, я новичок в WinRT-XAML, и я пытаюсь выяснить, что это такое:)

ОБНОВИТЬ:

это ссылки, где я получаю WrapPanel.cs, и это мой код XAML выглядит так:

    <GridView x:Name="gvResult">
        <GridView.ItemsPanel>
            <ItemsPanelTemplate>
                <local:WrapPanel
                    Orientation="Vertical"/>
            </ItemsPanelTemplate>
        </GridView.ItemsPanel>
        <GridView.ItemTemplate>
            <DataTemplate>
                <Grid Margin="5">
                    <Grid.RowDefinitions>
                        <RowDefinition Height="auto"/>
                        <RowDefinition Height="auto"/>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="300" />
                    </Grid.ColumnDefinitions>
                    <TextBlock Width="300" TextWrapping="Wrap">
                        <Underline>
                            <Run FontWeight="Medium" Text="{Binding abbKitab}"/><Run Text=" "/><Run FontWeight="Medium" Text="{Binding numBab}"/>
                            <Run FontWeight="Medium" Text=":"/> <Run FontWeight="Medium" Text="{Binding numAyat}"/>
                        </Underline>
                        <LineBreak/>
                        <Run Text="{Binding isi}"/>
                    </TextBlock>
                </Grid>
            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>

1 ответ

Возможно, если вы получили свой WrapPanel от OrientedVirtualizingPanel это сработало бы, но я бы не стал ставить на то, что это возможно. Вы можете создать свой собственный элемент управления списком с помощью пользовательской реализации виртуализации, но это кажется еще сложнее. Может быть, отказаться от своей пользовательской панели и просто использовать WrapGrid или сгруппировать свои результаты в виртуализированной панели, например, иметь страницы определенного размера, которые представляют группы результатов, каждая с определенным количеством элементов в WrapPanel? Затем вы можете перенести виртуализацию на внешнюю панель и настроить каждую группу на свою собственную.

Другие вопросы по тегам