Настраиваемая панель виртуализации для 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? Затем вы можете перенести виртуализацию на внешнюю панель и настроить каждую группу на свою собственную.